일반 클래스를 제네릭 클래스로 만들기
클래스 선언에 타입 매개변수 추가하기 (보통 타입 이름으로 E를 사용한다.)
하위 코드의 반환 타입, 필드 타입을 타입 매개변수로 변경하기
E[], E 반환타입 사용하기 - 객체 생성시 타입 변경해주어야함 // (런타임 타입과 컴파일 타입이 달라 힙 오염(item 32) 이 발생할 수 있다.)
Object[], E 반환타입 사용하기 - 반환하기 전 (E) 로 형변환 해주어야함 // 여러 번 형변환 해야함
List<E>, E 반환타입 사용하기 - 형변환이 필요없고, 성능은 살짝 느림 // Item28 에서는 리스트 사용을 강조했지만 제네릭 타입 내에서 리스트는 형변환의 안전성이 어느 정도 보장되기에 성능을 위해 배열을 많이 사용한다.
핵심정리
제네릭 타입으로 만들 수 있는 클래스를 제네릭 타입으로 만드는 것은 기존 클라이언트도 사용할 수 있으면서, 새 클라이언트가 더 편하게 사용할 수 있는 방법이다. 따라서 가능하다면 제네릭 타입으로 만들자.