#29 타입 안전이 보장되는 혼성 컨테이너의 사용을 고려하자
우선 컨테이너(container)란, 객체를 저장하는 역할을 하는 클래스들을 말합니다.
Set, Map 같은 컬렉션 클래스들이나 배열이 이에 해당합니다.
보통 컨테이너에 제네릭을 이용하면 컨테이너 당 이용 가능한 타입 매개변수의 개수가 제한됩니다.
Set<E> : 1개
Map<K, V> : 2개
만약 컨테이너 자체가 아닌, 요소의 키에 타입 매개변수를 두면 서로 다른 타입의 요소가 저장될 수 있는데 이를 혼성(heterogeneous) 컨테이너라고 합니다.
아래 Favorities 클래스는 Object 객체들을 Key와 Value를 이용한 Map처럼 저장하는 컨테이너입니다.
여러 타입의 요소를 저장하기 위해 컨테이너(Favorities 클래스) 대신 Key를 매개변수(Class<T>)화 했습니다.
따라서 Favorities 객체를 읽거나(get), 추가(put) 할 때 클라이언트에서 Key에 해당하는 Class 객체를 전달해야 합니다.
이 혼성 컨테이너를 일반적인 Map으로도 구현할 수 있습니다.
하지만 이는 데이터를 가져오는 과정에서 ClassCastException 런타임 에러가 발생할 수 있기 때문에, 타입 안전이 보장되는 혼성 컨테이너에 비해 위험합니다.
제네릭을 공부하다 보니 타입 안정성이 컴파일 단계에서 보장된다는 점이 가장 큰 장점인 거 같습니다.
쉽진 않지만 계속 공부해야겠네요.