오늘도 하나의 글을 참고하여 정리했습니다.
배열과 리스트의 구도로 설명이 시작되나 싶었지만
배열과 제네릭 타입의 차이로 아이템이 시작된다. (리스트 정의시 제네릭 타입을 사용하기에)
공변?
Sub가 Super의 하위 타입이라면 배열 Sub[]은 배열 Super[] 하위 타입이 된다.(함께 변한다)
불공변?
Type1과 Type2가 있을 때, List<Type1>은 List<Type2>의 하위 타입, 상위 타입 모두 아니다.
이 둘의 특징을 보고 배열 좋은데? 제네릭 문제 있는거 아니야? 라고 할 수 있으나,
문제가 있는건 배열이다.
아래 코드는 문법상 허용되는 코드이다.
Object[] objectArray = new Long[1];
objectArray[0] = "난 문자열이야!";
하지만 런타임에 실패한다.
아래 코드는 컴파일 단계에서 에러가 발생한다. 호환되지 않는 타입이기 때문
List<Object> objectList = new ArrayList<Long>();
objectList.add("난 문자열이야!");