✅ 자바의 타입 분류
기본형(primitive): int, long, double 등
참조형(reference): Integer, Long, Object 등
✅ 제네릭에 참조형만 적용 가능한 이유
타입 소거(Type Erasure)
- 자바 제네릭은 컴파일 타임 기능
- 따라서
List<String>으로 선언했더라도 컴파일 후에는 전부 List 또는 상한(타입 파라미터 T가 가질 수 인는 가장 위에 있는 타입)이 있는 경우 List<Object>, List<상한 타입> 와 같이 타입 소거
- 여기서
Object o = list.get(0);와 같이 가져오게 되는데 Object는 참조형만 가능하고 int 같은 기본형은 Object가 아니기 때문에 불가능
Object 기반 설계
- 자바 5에서 제네릭 도입 당시 기존 코드와의 완벽한 호환과 JVM 변경 최소화를 위해 제네릭을 Object 를 상한으로 하는 타입 시스템으로 설계(상한은 변경 가능 →
T extends SomeType)
- 즉, 기본형은 애초에 이 구조에 들어올 수 없는 구조로 설계됨
기본형과 참조형의 성능적인 차이