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