Effective Java

이펙티브 자바 완벽 공략 2부

아이템 33 - 타입 안전 이종 컨테이너를 고려하라.

제네릭은 Set< E >, Map<K,V> 등의 컬렉션과 ThreadLocal< T >, AtomicReference< T > 등의 단일원소 컨테이너에도 흔히 쓰인다. 이런 모든 쓰임에서 매개변수화되는 대상은 원소가 아닌 컨테이너 자신이다. 따라서 하나의 컨테이너에서 매개변수화할 수 있는 타입의 수가 제한된다.

하지만 더 유연한 수단이 필요할 때가 있다.

컨테이너 대신 키를 매개변수화한 다음, 컨테이너에 값을 넣거나 뺄 때 매개변수화한 키를 함께 제공하면 제네릭 타입 시스템이 값의 타입이 키와 같음을 보장해줄 것이다. 이런한 설계 방식을 타입 안전 이종 컨테이너 패턴이라 한다.



타입 토큰을 사용한 타입 안전 이종 컨테이너



한정적 타입 토큰



출처

이펙티브 자바 3/E
이펙티브 자바 완벽 공략 2