[Effective Java] Item28 - 배열보다는 리스트를 사용하라

지구🌍·2023년 3월 4일
0

Effective Java 공부

목록 보기
8/12
post-thumbnail

배열과 제네릭타입의 두가지 차이점

1. 공변

  • 배열
    • 공변 (conariant)
    • SubSuper의 하위 타입이라면 배열은 Sub[] 은 배열 Super[]의 하위 타입이 된다.
    • 즉, 함께 변한다.
    • 배열은 런타임에도 자신이 담기로 한 원소의 타입을 인지하고 있다.
    • 컴파일에는 아무런 영향을 끼치지 않지만 런타임시 ArrayStoreException을 던진다.
  • 제네릭
    • 불공변 (invaiant)
    • 서로 다른 타입 type1과 type2가 있을 때, List<type1>List<type2>의 상위 타입도 아니고 하위 타입도 아니다.
    • 컴파일 시 에러 던진다.

2. 실체화

  • 배열
    • 런타임에도 자신이 담기로 한 원소의 타입을 정확하게 인지하고 확인한다.
  • 제네릭
    • 런타임에는 타입 정보 소거된다. (erasure)

배열보다 리스트를 써야하는 이유

타입에 더 안전하며 런타임이 아닌 컴파일 시점에 에러를 잡아주기 때문이다

🎈귀중한 참고자료🎈
참고자료1

profile
일취월장 하며 성장! 중! 공부한 것을 기록하자(^∀^●)ノシ

0개의 댓글