일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
- db
- 데이터 타입
- MVCC
- 동시성
- Atomic Type
- text
- iterator
- Lock
- jpa
- 스프링
- Synchronized
- foreach
- iterable
- Di
- 자바
- Locking Read
- 동시성 문제
- 가비지 컬렉션
- java
- MySQL
- reflection
- gc
- 백엔드
- CAS
- 가비지 컬렉터
- Varchar
- Today
- Total
목록Java (15)
과정을 즐기자
개발을 하다보면 상수를 관리해야할 경우가 있습니다. 상수를 사용하는 곳마다 하드코딩을 하지 않고 따로 클래스를 만들면 효율적으로 관리할 수 있습니다. 그래서 Error 메세지를 관리하는 클래스인 ErrorMessageConstant를 만들어서 사용하고 있었습니다. 하지만 이 방식은 완벽한 싱글톤을 보장하지 못한다는 문제점이 있습니다. Before 먼저 기존에 상수를 관리하던 방식부터 살펴보겠습니다. ErrorMessageConstant public class ErrorMessageConstant { private ErrorMessageConstant() { } public static final String MEMBER_DUPLICATION_MESSAGE = "이미 가입된 회원입니다"; public st..
==, equals, hashcode 비교 == (동일성 비교) 두 객체가 있을 때 == 비교는 두 객체가 완전히 같다는 것이다. 즉 단순히 값뿐만 아니라 주소 값 자체가 같아야 true를 반환한다. equals (동등성 비교), hashcode equals, hashcode는 모든 객체의 부모 클래스인 Object 클래스에 정의되어 있다. public boolean equals(Object obj) { return (this == obj); } 기본적으로 equals는 동일성 비교이다. 동일성 비교가 아니라 동등성 비교가 필요할 때 재정의해서 사용한다. 예를들어 Integer, String 처럼 값을 표현할 때 객체가 같은지 비교하는 것이 아니라 값 자체가 같은 지 비교하고 싶을 때 재정의 한다. Ha..
추상 클래스 추상 클래스는 변수를 가질 수 있다. 일반 메소드, 추상 메소드 둘 다 있을 수 있다. 자식 클래스에서 일반 메소드는 재정의 할 수도 있고 그냥 사용할 수도 있다. 하지만 추상 메소드는 반드시 재정의 해야한다. 단일 상속을 지원한다. 코드로 이러한 특징들을 확인해보자 public abstract class AbstractParent { public int number = 10; // 변수 선언 가능 public void hello() { System.out.println("hello"); // 일반 메소드 구현가능 } public abstract void hi(); // 추상 메소드 사용가능 }public class AbstractChild extends AbstractParent { @Ov..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bEQ8jf/btrPwY6L9ir/3rKG8eXIRuLZepYjAMsfIK/img.png)
Call by Value Call by value는 값에 의한 호출이다. 다르게 표현하면 값만 전달한다고 할 수 있다. 따라서 call by value 방식으로 값을 전달받고 수정을 해도 원본 값은 바뀌지 않는다. 값을 전달받으면 스택에 메모리가 할당된다. 서로 같은 메모리가 아님! class CallByValue { @Test void test() { int a = 0; -- (1) int b = 0; -- (1) assertEquals(a, 0); assertEquals(b, 0); addTest(a, b); assertEquals(a, 0); assertEquals(b, 0); } void addTest(int a, int b) { a += 10; b += 10; System.out.println(..
static 변수 static 변수를 사용하는 목적에는 2가지가 있다. 메모리의 효율 공유의 목적 class Counter { static int count = 0; Counter() { count++; System.out.println(this.count); } } public class Sample { public static void main(String[] args) { Counter c1 = new Counter(); Counter c2 = new Counter(); } }위와 같은 코드를 생각해보자. static 변수를 사용하면 count를 공유할 수 있다. static 변수가 없었으면 new Counter()로 객체를 생성할 때 count가 1 늘어나지만 공유되지는 않아 계속 만들어도 cou..