Java

[JVM 밑바닥까지 파헤치기] 10-2. 프런트엔드 컴파일과 최적화: 편의 문법

noahkim_ 2024. 12. 25. 00:57

저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다

 

1. 제네릭

  • 매개 변수화된 타입 또는 매개 변수화된 다형성

 

타입 소거

동작 원리
  • 컴파일 타임에만 타입 정보 확인
  • 런타임에는 타입 정보 제거
    • 원시타입으로 변환됨
    • 타입이 같은 모든 제네릭 인스턴스의 공통 상위 타입
  • 타입캐스팅 관련 바이트코드가 자동으로 삽입됨

 

특징
  • 제네릭 타입과 상관없이 타입이 동일함

 

장점

하위 호환성
  • 현재 버전보다 낮은 버전에서 실행될 수 있음

 

타입 안정성
  • 컴파일 타임에 타입 체크

 

단점

제약사항
if (item instanceof E) {}       // X
E newItem = new E();		// X
E[] itemArray = new E[10];	// X
  • 인스턴스 여부 판단 불가
  • 제네릭으로 객체 생성 불가
  • 제네릭으로 배열 생성 불가

 

오버로딩 불가
  • 타입 소거로 인해 원시타입만 남아 시그니처가 동일해짐

 

기본 타입 지원 X
  • 기본 타입은 형변환 불가
  • 연산 시, 언박싱 / 오토박싱 수행 지원

 

2. 오토박싱, 언박싱

  • 래퍼 타입 / 복원 메서드로 자동 변환됨