2025/02/09 2

Effective Java Item33. 타입 안전 이종 컨테이너를 고려하라.

제네릭은 Set, Map 등의 컬렉션과 ThreadLocal, AtomicReference 등의 단일 원소 컨테이너에 흔히 쓰인다. (Set는 하나의 타입 매개변수만 있으면 되며, Map에는 키와 값의 타입을 뜻하는 2개만 필요하다.)더 유연하게 타입 매개변수를 사용할 수 있는 방법은 무엇일까? 여기서 나온 방법이 바로 타입 안전 이종 컨테이너 패턴(type safe heterogeneous container pattern)이다. 타입 안전 이종 컨테이너 패턴? 컨테이너 대신 키를 매개변수화한 다음, 컨테이너에 값을 넣거나 뺄 때 매겨변수화한 키를 함께 제공한다.예시.public static void main(String[] args) { Favorite f = new Favorite(); ..

Java/EffectiveJava 2025.02.09

Effective Java Item32. 제네릭과 가변인수를 함께 쓸 때는 신중하라.

가변인수(varargs) 메서드와 제네릭은 자바 5때 함께 추가되었으나, 둘의 조합은 잘 어울리지 않는다.가변인수는 메서드에 넘기는 인수의 개수를 클라이언트가 조절할 수 있게 해주는데, 구현 방식에 허점이 있다. 그 허점이란, 가변인수 메서드를 호출하면 가변인수를 담기 위한 배열이 하나 만들어지는데, 그 배열을 내부에 감추지 않고 클라이언트에게 노출하는 문제가 생기게 되면서 제네릭이나 매개변수화 타입이 포함되면 알기 어려운 컴파일 경고가 발생한다.// possible heap pollution from parameterized vararg type static void dangerous(List... stringLists) { List intList = List.of(42); Objec..

Java/EffectiveJava 2025.02.09