#27 제네릭 메서드를 애용하자
이 메서드(union)는 두 개의 Set의 합을 반환하고 있습니다.
당연히 unchecked 경고가 2개가 나타나고 있는데 안전하지 않습니다.
제네릭 메서드로 만들면 아래와 같습니다.
경고들도 사라지고 타입 안전도 보장됩니다.
재귀적 타입 바운드 (recursive type bound)는 타입 매개변수가 자신을 포함하는 수식에 의해 한정되는 것을 말한다.
예를 들면, 아래 코드에서 타입 매개변수 T는 Comparable<T>를 구현하는 타입을 정의합니다.
Comparable<String>은 String 비교를, Comparable<Integer>는 Integer 비교를 구현합니다.
주로 List에서 이 Comparable 인터페이스를 구현을 통해 목록을 정렬, 검색, 최소 최대 값을 구하고 있습니다.
결국 List는 모든 목록 요소들이 비교 가능(comparable) 해야 합니다.
이 요소들이 비교 가능하다는 것을 표현하기 위해 아래와 같이 재귀적 타입 바운드를 이용할 수 있습니다.
단순히 T를 타입 매개변수로만 이용하지 않고, Comparable<T>를 상속받아 정렬이 가능한 매개 변수 T로 구현했습니다.
이제까지 제네릭에 대한 내용의 결론은 런타임이 아닌 컴파일 단계에서 타입 체크를 해서 보다 안전하게 이용하자 입니다.
이를 위해 별도의 캐스팅이 없는 메서드는 제네릭을 이용할 수 있습니다.