[아이템 28] 배열보다는 리스트를 사용하라
IT 개발/개념 정리
2022. 5. 29. 22:47
- 배열은 공변이고 제네릭은 불공변이다. 이는 Sub가 Super의 하위 타입이면 배열 Sub[]도 Super[]의 하위 타입이 된다.
- 배열은 실체화(reify)된다. 제네릭 배열은 런타임 시 ClassCastException이 발생할 수 있어 지원하지 않는다.
- E, List<E>, List<String> 같은 타입을 실체화 불가 타입 - 런타임에는 컴파일타임보다 타입 정보를 적게 가지는 타입
- 제네릭 컬렉션에서는 자신의 원소 타입을 담은 배열을 반환하는게 보통은 불가능하다. 또한 제네릭 타입과 가변인수 메서드(varargs method, 아이템53)를 함께 쓰면 해석하기 어려운 경고 메시지를 받게 된다.
- 배열로 형변환할 때 제네릭 배열 생성 오류나 비검사 형변환 경고가 뜨는 경우 대부분은 배열인 E[]대신 컬렉션인 List<E>를 사용하면 해결된다.
뒷 장에서 확인할 내용
완벽하지는 않지만 대부분의 상황에서 이 문제를 해결해주는 방법을 아이템 33에서 설명한다.
반응형
'IT 개발 > 개념 정리' 카테고리의 다른 글
[아이템 39] 명명 패턴보다 애너테이션을 사용하라 (0) | 2022.06.21 |
---|---|
[아이템 29] 이왕이면 제네릭 타입으로 만들라 (0) | 2022.06.03 |
[아이템 27] 비검사 경고를 제거하라 (0) | 2022.05.28 |
[아이템 26] raw type은 사용하지 말라 (0) | 2022.05.27 |
[아이템 25] 톱레벨 클래스는 한 파일에 하나만 담으라 (0) | 2022.05.27 |