[Effective Java] 배열보다는 리스트를 사용하라


[Effective Java] 배열보다는 리스트를 사용하라

배열과 제네릭 타입의 차이 1 배열은 공변이다. 공변은 함께 변한다는 뜻 Sub가 Super의 하위 타입이면 배열 Sub[]는 배열 Super[]의 하위 타입이 된다. 제네릭은 불공변이다. 서로 다른 타입 Type1, Type2가 있을 때 List<Type1>은 List<Type2>의 하위/상위 타입이 아니다 제네릭이 문제 있어 보이지만 문제가 있는 건 배열 쪽이다. 위 코드는 컴파일 단계에서는 문제가 없지만 런타임 단계에서 문제가 발생한다. List를 사용하면 처음부터 호환이 되지 않는다. 컴파일 단계에서 문제를 알 수 있게 된다. 배열과 제네릭의 차이 2 배열은 실체화(reify) 된다. 배열은 런타임에도 담기로 한 원소의 타입을 인지하고 확인 그래서 Long 배열에 String을 넣으려 하면 ArrayStoreException이 발생 제네릭은 타입 정보가 런타임에는 소거된다. 원소 타입을 컴파일 타임에만 검사하고 런타임에는 알 수 없다. 소거는 제네릭이 없는 레거시 코드와 제네...


#EffectiveJava #공변 #리스트 #배열 #불공변 #이펙티브자바 #자바 #컬렉션

원문링크 : [Effective Java] 배열보다는 리스트를 사용하라