13.1 왜 제네릭을 사용해야 하는가?
컴파일 시 강한 타입 체크를 할 수 있다.
타입 변환(casting)을 제거한다.
13.2 제네릭 타입(class, interface)
제네릭은 클래스 설계 시 구체적인 타입을 설정하는 대신 타입 파라미터를 넣고 실제 클래스가 사용될 때 구체적인 클래스를 지정하면서 타입 변환을 최소화 시킨다.
13.3 멀티 타입 파라미터(class<K,V,...>, interface<K,V,...>)
13.4 제네릭 메소드(<T,R> R method(T t))
13.5 제한된 타입 파라미터(<T extends 최상위타입>)
타입 파라미터에 지정되는 구체적인 타입을 제한할 수 있다. 이를 위해서 다음과 같이 한다.
public <T extends 상위타입> 리턴타입 메소드(매개변수, ...) { ... }
상위 타입은 클래스 뿐만 아니라 인터페이스도 가능하다.
13.6 와일드카드 타입(<?>, <? extends ...>, <? super>)
코드에서 ? 는 와일드카드라고 부른다. 구체적인 타입대신 와일드카드를 다음과 같은 형태로 사용할 수 있다.
- 제네릭타입<?>
- 제네릭타입<? extends 상위타입>
- 제네릭타입<? super 하위타입>
13.7 제네릭 타입의 상속과 구현