list
-
28. 배열보다는 리스트를 사용하라JAVA/Effective java 2021. 3. 13. 14:48
배열과 제네릭 타입에는 중요한 차이가 두 가지 있다. 공변 첫 번째, 배열은 공변이다. Sub가 Super의 하위 타입이라면 배열 Sub[]는 Super[]의 하위 타입이 된다. (공변 : 함께 변한다) 반면 제네릭은 불공변이다. 서로 다른 타입 Type1과 Type2가 있을 때, List은 List의 하위 타입도 아니고 상위 타입도 아니다. 이때 문제가 있는 건 배열쪽이다. 어느 쪽이든 Long 용 저장소에 String을 넣을 수는 없다. 배열에서는 그 실수를 런타임에야 알게 되지만, 리스트를 사용하면 컴파일 때 바로 알 수 있다. 실체화 배열은 런타임에도 자신이 담기로 한 원소의 타입을 인지하고 확인한다. 앞 서 코드에서 보듯 Long 배열에 String을 넣으려 하면 ArrayStoreExcepti..