들어가기 전 이 글은 인프런 백기선님의 이펙티브 자바 강의를 복습하며 작성한 글입니다. 이 글의 요약 제네릭 사용 시, 유연성을 제공하기 위해 한정적 와일드카드를 제공하자 Producer 타입 (매개변수로 전달된 Collection에서 객체를 꺼내쓰는 것)에는 하나만 사용하는 것은 헬퍼 메서드 등을 재정의 해야하기 때문에 비효율적이다. 와일드카드 하나만 사용할꺼라면 타입 한정 매개변수 를 사용하고, 는 PECS 따를 때만 사용하는 것이 좋다. 핵심 정리 1 : Chooser와 Union API 개선 (사진 붙이기) 와일드 카드(?)를 사용할 때는 PECS 일 때만 사용하자. PECS: Producer-Extends, Consumer-Super Producer-Extends Producer는 매개변수로 전..
들어가기 전 이 글은 인프런 백기선님의 이펙티브 자바 강의를 복습하며 작성한 글입니다. 이 글의 요약 배열은 공변이므로 타입 불안정성이 존재한다. 제네릭은 불공변이므로, 타입 불안정성이 해결된다. 따라서 배열대신 제네릭을 사용한 리스트를 사용하라. 배열은 실체화 되지만, 제네릭은 소거된다. 배열은 컴파일 되어도 바이트 코드에 남아있으나, 제네릭은 컴파일되면 소거되어 바이트 코드에 남아있지 않는다. 제네릭은 컴파일 단계에서 소거되어 Raw 타입으로만 남는다. 대신 컴파일러는 필요한 시점에 캐스팅 코드를 넣어준다. 제네릭 타입의 배열은 생성할 수 없다. 그렇지만 형변환해서 사용할 수는 있다. 배열보다는 리스트를 사용하는 것을 추천한다. 제네릭 타입을 지원하기 때문이다. 배열을 사용할 경우, 특히 상위 타입의..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 이 글의 요약 어노테이션은 @Retention을 통해서 어노테이션의 참조 시점을 결정할 수 있다. Runtime : JVM 메모리에 올라감 → 런타임 참조 가능 Class : 바이트 코드까지만 참조 가능. Class 파일에만 선언되어있음. Source : 컴파일러가 컴파일 할 때만 참조 가능 @Target 어노테이션을 이용해 어노테이션의 사용 위치를 설정할 수 있음. 완벽 공략 41. 어노테이션 자바 어노테이션을 정의하는 방법 @Retention: 어노테이션의 정보를 얼마나 오래 유지할 것인가 Runtime, Source, Class이 존재함. @Target : 어노테이션을 사용할 수 있는 위치 Type, Field, Method,..
들어가기 전 이 글은 인프런 백기선님의 이펙티브 자바 강의를 복습하며 작성한 글입니다. 이 글의 요약 비검사 경고는 컴파일러가 컴파일 환경에서 타입 안정성을 추론하는데 불안정한 데이터가 제공되면 발생한다. 비검사 경고가 발생하더라도 컴파일이 완료되며 코드도 실행 가능하다. 다만 런타임 에러가 발생할 수 있다. 비검사 경고는 발생하면 가능한한 조치를 취해서 모두 제거해준다. 비검사 경고 제거가 불가능할 경우, @SuppressWarnings("uncheck") 어노테이션으로 비검사 경고를 무시한다. @SuppressWarnings는 타입 안정성을 보장할 수 없지만, 실질적으로 타입 안전할 때 사용한다. @SuppressWarnings는 가능한 좁은 범위에 작성. @SuppressWarnings의 이유를 작..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 이 글의 요약 Generic을 이용해서 반복되는 부분을 줄이면 코드의 전체 양이 줄어든다 코드의 전체 양이 줄어들면 유지보수 해야하는 영역이 줄어들기 때문에 손쉽게 유지보수 할 수 잇다. 완벽공략 p156, 마이그레이션 호환성을 위해 로 타입을 지원하고 제네릭 구현에는 소거 방식을 사용하기로 했다. (아이템 28) p158, 제네릭 메서드 (아이템 30) p158, 한정적 와일드카드 타입 (아이템 31) Generic DAO 만들기 + GenericRepository 만들기 이번 챕터에서 완벽공략은 위와 같이 나온다. 하지만 실제로는 다음 아이템을 공부하면서 작성할 수 있는 녀석들이기 때문에 여기서는 Generic Repositor..