컴파일 단계에서 컬렉션과 API 타입 안전성을 확보합니다.
제네릭은 클래스와 메서드가 다룰 타입을 매개변수화합니다. List<String>은 String만 넣을 수 있어 꺼낼 때 cast가 필요하지 않습니다.
예제에서 class Box<T> { T value; } 부분부터 찾으세요. 선언 타입, 실제 객체와 반환값을 한 줄씩 따라가면서 컴파일 단계에서 잡히는 문제와 실행 중 생기는 문제를 구분하세요.
타입 소거로 대부분의 제네릭 타입 정보는 런타임에 사라집니다. 기본형은 타입 인수로 쓸 수 없어 래퍼 타입을 사용합니다.
PECS 원칙에 따라 값을 생산하는 매개변수는 ? extends T, 소비하는 매개변수는 ? super T를 고려합니다.
현재 코드를 먼저 실행해 출력과 타입 흐름을 확인한 뒤 두 값을 바꾸는 제네릭 메서드를 작성하세요.
List<Object>는 List<String>의 상위 타입이 아닙니다. 제네릭은 기본적으로 invariant입니다.
직접 바꿔보세요두 값을 바꾸는 제네릭 메서드를 작성하세요.
실행 버튼을 누르면 결과가 여기에 표시됩니다.