오늘도 하나의 글을 참고하여 정리했습니다.

배열과 리스트의 구도로 설명이 시작되나 싶었지만

배열과 제네릭 타입의 차이로 아이템이 시작된다. (리스트 정의시 제네릭 타입을 사용하기에)

배열과 제네릭 타입의 중요한 차이


  1. 배열은 공변(covariant)이고, 제네릭은 불공변(invariant)이다.

이 둘의 특징을 보고 배열 좋은데? 제네릭 문제 있는거 아니야? 라고 할 수 있으나,

문제가 있는건 배열이다.

아래 코드는 문법상 허용되는 코드이다.

Object[] objectArray = new Long[1];
objectArray[0] = "난 문자열이야!";

하지만 런타임에 실패한다.

Untitled

아래 코드는 컴파일 단계에서 에러가 발생한다. 호환되지 않는 타입이기 때문

List<Object> objectList = new ArrayList<Long>();
objectList.add("난 문자열이야!");

Untitled