반응형
배열은 공변(convariant)이다.
-
Item 28. 배열보다는 리스트를 사용하라Book/Effective Java 3E 2022. 11. 12. 09:10
배열과 제네릭 타입의 차이 배열은 공변(convariant)이다. Sub가 Super의 하위 타입이라면 배열 Sub[]는 배열 Super[]의 하위 타입이 된다(공변, 즉 함께 변한다는 뜻이다). 반면, 제네릭은 불공변(invariant)이다. 즉, List은 List의 하위 타입도 아니고 상위 타입도 아니다. 배열은 실체화(reify)된다. 배열은 런타임에도 자신이 담기로 한 원소의 타입을 인지하고 확인한다(아래 코드 28-1 런타임 실패). 반면, 제네릭은 타입 정보가 런타임에는 소거(erasure)된다. 원소 타입을 컴파일타임에만 검사한다. 소거는 제네릭이 지원되기 전의 레거시 코드와 제네릭 타입을 함께 사용할 수 있게 해주는 메커니즘이다. // 코드 28-1 런타임에 실패한다. Object[] o..