본문 바로가기

1_스터디

[EffectiveJava] ITEM 28. 배열보다는 리스트를 사용하라

반응형
배열 제네릭 차이

 

1. 배열은 공변이다.
 
상위 하위 타입이 존재하며, 이런 관계가 성립 될 시에는 문제가 있는 코드도 '런타임 시점'에 오류를 발견 할 수 있다.
이와는 다르게 제네릭의 경우 상 하위 관계가 성립되지 않으며, 불공변 관계이므로 서로 종속적일 수 없다.
공변, 불공변 관련 참고 URL : https://hwan33.tistory.com/24
2. 배열은 실체화 된다.
 
제네릭은 런타임에는 타입정보가 소거 된다. ( 컴파일에만 검사, 런타임에는 확인 하지 않는다 )
그렇기 때문에 제네릭은 컴파일시점에 안전성이 높다. (런타임에선 낮음)
배열의 경우 런타임시점에 체크를 하기때문에 런타임 시점에 안정성이 높다. 다만 컴파일시에는 체크를 하지 못한다.
제네릭 타입 시스템의 취지
 
 
>> 런타임에 ClassCastException이 발생하는 일을 막겠다 라는 시스템 취지에 어긋난다.

 

반응형