[아이템 28] 배열보다는 리스트를 사용하라

  • 배열은 공변이고 제네릭은 불공변이다. 이는 Sub가 Super의 하위 타입이면 배열 Sub[]도 Super[]의 하위 타입이 된다.
  • 배열은 실체화(reify)된다. 제네릭 배열은 런타임 시 ClassCastException이 발생할 수 있어 지원하지 않는다.
  • E, List<E>, List<String> 같은 타입을 실체화 불가 타입 - 런타임에는 컴파일타임보다 타입 정보를 적게 가지는 타입
  • 제네릭 컬렉션에서는 자신의 원소 타입을 담은 배열을 반환하는게 보통은 불가능하다. 또한 제네릭 타입과 가변인수 메서드(varargs method, 아이템53)를 함께 쓰면 해석하기 어려운 경고 메시지를 받게 된다.
  • 배열로 형변환할 때 제네릭 배열 생성 오류나 비검사 형변환 경고가 뜨는 경우 대부분은 배열인 E[]대신 컬렉션인 List<E>를 사용하면 해결된다.

 

뒷 장에서 확인할 내용

완벽하지는 않지만 대부분의 상황에서 이 문제를 해결해주는 방법을 아이템 33에서 설명한다. 

반응형