[java] 자바 제네릭의 타입 소거(Type Erasure)
자바에 소개된 제네릭은 컴파일 시에만 타입 검사를 하고, 런타임 시에는 타입 정보를 소거하는 개념이다. 이는 자바 제네릭 코드가 타입에 안전하면서도 기존의 런타임 환경과 호환성을 유지할 수 있도록 한다.
타입 소거(Type Erasure)란?
제네릭 타입의 지정자는 컴파일 시에만 사용되며, 런타임 시에는 해당 지정자에 대한 정보가 제거된다. 예를 들어, List<String>
과 List<Integer>
는 컴파일 시에는 서로 다른 타입으로 취급되지만, 런타임 시에는 동일한 List
타입으로 처리된다.
타입 소거의 영향
타입 소거는 다음과 같은 영향을 미친다.
- 제네릭 타입 정보가 소거되므로 런타임 시에는 제네릭 타입의 실제 타입을 알 수 없다.
- 제네릭 타입의 데이터를 읽을 때 캐스팅(casting)이 필요하다.
- 런타임 시에는 모든 제네릭 타입이 원시 타입으로 변환된다.
예시 코드
다음은 제네릭을 사용하는 간단한 자바 클래스의 예시이다.
public class Box<T> {
private T value;
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
위의 Box
클래스의 제네릭 타입 T
는 런타임 시에는 소거되어 원시 타입으로 변환된다.
결론
자바의 제네릭은 타입 소거를 통해 타입 안정성을 보장하면서도 기존 코드와의 호환성을 유지한다. 타입 소거의 동작을 이해하는 것은 제네릭을 사용하는 개발자에게 중요하다.