정리

배열과 제네릭 타입에는 중요한 차이가 두가지 있다. 첫번째, 배열은 공변이다. sub 가 super 의 하위 타입이라면 배열 Sub[] 는 Super[]의 하위타입이된다.(즉, 함께 변한다는 뜻이다.) 반면 제네릭은 불공변이다. 두번째, 배열은 실체화(reify) 된다. 배열은 런타임에소 자신이 담기로 한 원소의 타입을 인지하고 확인한다. 반면 제네릭은 타입정보가 런타임에는 소거 된다. 이상의 차이로 배열과 제네릭은 잘 어우러지지 못한다.

제네릭배열을 만들지 못하게 막는 이유는, 타입이 안전하지 않게 때문이다.

핵심정리

베열과 제네릭에는 매우 다른 타입 규칙이 적용된다. 배열은 공변이고 실체화되는 반면, 제네릭은 불공변이고 타입정보가 소거된다. 런타임에는 타입 안전하지만 컴파일타입에는 그렇지 않다. 제네릭은 반대다. 그래서 둘을 섞어 쓰기란 쉽지 않다. 둘은 섞어 쓰다가 컴파일 오류나 경고를 만나면, 가장 먼저 배열을 리스트로 대체하는 방법을 적용해보자.