배열의 문제점
// 배열 사용 시 런타임에서 예외를 던짐
Object[] objectArray = new Long[1];
objectArray[0] = "타입이 달라 넣을 수 없음";
// 리스트 사용 시 컴파일할 때 잘못됨을 바로 알 수 있음
List<Object> ol = new ArrayList<Long>();
ol.add("타입이 달라 넣을 수 없음");
배열은 런타임에도 자신이 담기로 한 원소의 타입을 확인함
제네릭은 타입 정보가 런타임에는 소거됨
→ 원소의 타입을 컴파일 타임에만 검사함
List<String>[] stringLists = new List<String>[1]; // 제네릭 배열을 생성할 수 있다고 가정
List<Integer> intList = List.of(42);
Object[] objs = stringLists;
objs[0] = intList;
String s = stringLists[0].get(0);
stringLists[0].get(0);
로 꺼낼 때 꺼낸 원소를 String으로 형변환하는데, 원소가 Integer이므로 ClassCastException 발생→ 위와 같은 일을 방지하기 위해 컴파일 오류가 필요