[java] 자바 제네릭의 타입 소거(Type Erasure)

자바에 소개된 제네릭은 컴파일 시에만 타입 검사를 하고, 런타임 시에는 타입 정보를 소거하는 개념이다. 이는 자바 제네릭 코드가 타입에 안전하면서도 기존의 런타임 환경과 호환성을 유지할 수 있도록 한다.

타입 소거(Type Erasure)란?

제네릭 타입의 지정자는 컴파일 시에만 사용되며, 런타임 시에는 해당 지정자에 대한 정보가 제거된다. 예를 들어, List<String>List<Integer>는 컴파일 시에는 서로 다른 타입으로 취급되지만, 런타임 시에는 동일한 List 타입으로 처리된다.

타입 소거의 영향

타입 소거는 다음과 같은 영향을 미친다.

예시 코드

다음은 제네릭을 사용하는 간단한 자바 클래스의 예시이다.

public class Box<T> {
    private T value;
    
    public T getValue() {
        return value;
    }
    
    public void setValue(T value) {
        this.value = value;
    }
}

위의 Box 클래스의 제네릭 타입 T는 런타임 시에는 소거되어 원시 타입으로 변환된다.

결론

자바의 제네릭은 타입 소거를 통해 타입 안정성을 보장하면서도 기존 코드와의 호환성을 유지한다. 타입 소거의 동작을 이해하는 것은 제네릭을 사용하는 개발자에게 중요하다.

참고 문헌