들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 이 글의 요약 equals()는 가급적이면 재정의하지 않는 것이 최선임. 논리적 동치성은 가지고 있는 값이 같은지로 판단, 객체의 동일성은 같은 주소를 가지는지 판단. equals() 구현시 반사성, 대칭성, 추이성, 일관성, null 아님을 지켜서 구현해야 한다. 상속 구조에서는 equals() 규약을 만족하기 어렵다. 상속 구조에 필드가 추가된 구조라면 equals() 규약을 만족하는 방법이 없음. 상속 구조에 필드가 추가되지 않은 구조라면, 상위 클래스의 equals()를 이용해야함. 상속 구조에 필드가 추가된 경우라면, Composition을 이용해서 equals()를 손쉽게 구현할 수 있음. 아이템 10. equals는 일..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 정리한 글입니다. 이 글의 정리 한정적 타입 토큰 ( Class
들어가기 전 이 글은 인프런 백기선님의 이펙티브 자바 강의를 복슴하져 작성한 글입니다. 이 글의 요약 핵심 정리 : 타입 토큰을 사용한 타입 안전 이종 컨테이너 타입 안전 이종 컨테이너 타입안전 이종 컨테이너는 한 타입의 객체만 담을 수 있는 컨테이너가 아니라, 여러 다른 타입 (이종)을 담을 수 있는 타입 안전한 컨테이너. 타입 토큰 타입 토큰은 String.class, Class을 의미한다. 타입 안전 이종 컨테이너 구현 방법 컨테이너가 아니라 "키"를 매개변수화 하라! 하지만 두 가지 단점이 존재한다. 타입 안전 컨테이너 객체란? 컨테이너 객체는 다른 오브젝트를 넣을 수 있는 객체들인데, 예시로는 Map, Set, Optional 같은 클래스다. 그런데 이 때까지 우리가 컨테이너를 사용해왔던 방법은..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 이 글의 요약 완벽공략 45. ThreadLocal (쓰레드 지역 변수) 모든 멤버 변수는 기본적으로 여러 쓰레드에서 공유해서 쓰일 수 있다. 이 때 쓰레드 안전성과 관련된 여러 문제가 발생할 수 있다. 경합 (Race-Condition) 교착상태(Dead Lock) LiveLock : 쓰레드끼리 Lock만 계속 교체하는 상태다. 쓰레드 지역 변수를 사용하면 동기화를 하지 않아도 한 쓰레드에서만 접근 가능한 값이기 때문에 안전하게 사용할 수 있다. 한 쓰레드 내에서 공유하는 데이터로, 메서드 매개변수에 매번 전달하지 않고 전역변수처럼 사용할 수 있다. ThreadLocal (쓰레드 로컬)이란? 쓰레드 로컬은 쓰레드 범위의 변수다. ..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 이 글의 요약 제네릭과 배열은 특성상 맞지 않다. 제네릭 가변인수는 컴파일러가 금지한 제네릭 배열을 생성한다. 제네릭 배열은 Heap 오염 위험성이 잇다. 제네릭 배열은 Heap 오염 위험성이 있다. 따라서 배열을 가급적이면 List로 바꾸는 것이 좋다. 제네릭 가변인수를 어쩔 수 없이 사용해야 한다면 다음 두 가지를 지킨다. 제네릭 가변인수에 어떠한 값도 넣지 않는다. 제네릭 가변인수를 메서드 밖으로 반환하지 않는다. 타입 한정 매개변수 는 소거된 후 일반적으로 가장 포괄적인 Object로 변환된다. 배열을 사용하는 경우 가급적 List로 바꾸자. 아래 장점이 있다. 제네릭을 사용해 타입 안정성을 확보할 수 있다. Heap 오염을..