brunch

You can make anything
by writing

C.S.Lewis

by 이승현 Jun 05. 2018

제네릭(Generics)

#29 타입 안전이 보장되는 혼성 컨테이너의 사용을 고려하자

Effective Java - 제네릭(Generics)


#29 타입 안전이 보장되는 혼성(heterogeneous) 컨테이너의 사용을 고려하자


우선 컨테이너(container)란, 객체를 저장하는 역할을 하는 클래스들을 말합니다.

Set, Map 같은 컬렉션 클래스들이나 배열이 이에 해당합니다.


보통 컨테이너에 제네릭을 이용하면 컨테이너 당 이용 가능한 타입 매개변수의 개수가 제한됩니다.

Set<E> : 1개
Map<K, V> : 2개


만약 컨테이너 자체가 아닌, 요소의 키에 타입 매개변수를 두면 서로 다른 타입의 요소가 저장될 수 있는데 이를 혼성(heterogeneous) 컨테이너라고 합니다.




혼성 컨테이너


아래 Favorities 클래스는 Object 객체들을 Key와 Value를 이용한 Map처럼 저장하는 컨테이너입니다.

여러 타입의 요소를 저장하기 위해 컨테이너(Favorities 클래스) 대신 Key를 매개변수(Class<T>)화 했습니다.


#01 혼성 컨테이너


따라서 Favorities 객체를 읽거나(get), 추가(put) 할 때 클라이언트에서 Key에 해당하는 Class 객체를 전달해야 합니다.


#02 혼성 컨테이너 - 클라이언트


이 혼성 컨테이너를 일반적인 Map으로도 구현할 수 있습니다.

하지만 이는 데이터를 가져오는 과정에서 ClassCastException 런타임 에러가 발생할 수 있기 때문에, 타입 안전이 보장되는 혼성 컨테이너에 비해 위험합니다.


#03 Map




제네릭을 공부하다 보니 타입 안정성이 컴파일 단계에서 보장된다는 점이 가장 큰 장점인 거 같습니다.

쉽진 않지만 계속 공부해야겠네요.

매거진의 이전글 제네릭(Generics)
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari