반응형
아이템 33 : 타입 안전 이종 컨테이너를 고려하라
제네릭은 단일원소 컨테이너에도 흔히 쓰인다. 이런 모든 쓰임에서 매개변수화되는 대상은 (원소가 아닌) 컨테이너 자신이다. 따라서 하나의 컨테이너에서 매개변수화할 수 있는 타입의 수가 제한된다.
하지만 더 유연한 수단이 필요할 때도 종종 있다. 이런 경우 쉬운 해법이 있다. 컨테이너 대신 키를 매개변수화한 다음, 컨테이너에 값을 넣거나 뺄 때 매개변수화한 키를 함께 제공하면 된다. 이렇게 하면 제네릭 타입 시스템이 값의 타입이 키와 같음을 보장해줄 것이다. 이러한 설계 방식을 타입 안전 이종 컨테이너 패턴이라 한다.
각 타입의 Class 객체를 매개변수화한 키 역할로 사용하면 되는데, 이 방식이 동작하는 이유는 class의 클래스가 제네릭이기 때문이다.
핵심 정리
컬렉션 API로 대표되는 일반적인 제네릭 형태에서는 한 컨테이너가 다룰 수 있는 타입 매개변수의 수가 고정되어 있다. 하지만 컨테이너 자체가 아닌 키를 타입 매개변수로 바꾸면 이런 제약이 없는 타입 안전 이종 컨테이너를 만들 수 있다. 타입 안전 이종 컨테이너는 Class를 키로 쓰며, 이런 식으로 쓰이는 Class 객체를 타입 토큰이라 한다. 또한, 직접 구현한 키 타입도 쓸 수 있다. 예컨대 데이터베이스의 행(컨테이너)을 표현한 DatabaseRow 타입에는 제네릭 타입인 Column<T>를 키로 사용할 수 있다.
반응형
'언어 > JAVA' 카테고리의 다른 글
[Effective Java] ordinal 메서드 대신 인스턴스 필드를 사용하라 (0) | 2020.03.28 |
---|---|
[Effective Java] int 상수 대신 열거 타입을 사용하라 (0) | 2020.03.27 |
[Effective Java] 제네릭과 가변인수를 함께 쓸 때는 신중하라 (0) | 2020.03.25 |
[Effective Java] 한정적 와일드카드를 사용해 API 유연성을 높이라 (0) | 2020.03.24 |
[Effective Java] 이왕이면 제네릭 메서드로 만들라 (0) | 2020.03.23 |