[java] 제네릭의 자료형 제거와 바이트 코드 변환

제네릭은 자바에서 컴파일 시간에만 사용되고 실행 시간에는 제거되는 특성을 가지고 있습니다. 따라서, 제네릭 타입을 사용하는 코드는 컴파일될 때만 해당 타입 정보가 유지되고, 바이트 코드로 변환되면 제네릭 타입 정보는 제거됩니다.

제네릭 타입의 사용

import java.util.*;

public class GenericExample {
    public static void main(String[] args) {
        List<String> strings = new ArrayList<>();
        strings.add("Hello");
        strings.add("World");
        
        String s = strings.get(0); // No cast needed
        System.out.println(s);
    }
}

위의 예시에서 List<String>은 제네릭 타입으로 선언되어 있습니다. 하지만 컴파일 후에는 해당 정보는 사라지게 됩니다.

자료형 제거와 바이트 코드 변환

제네릭 정보는 컴파일 시간에만 사용되기 때문에, 바이트 코드로 변환될 때는 해당 제네릭 정보는 제거됩니다. 이는 제네릭을 사용한 코드와 사용하지 않은 코드가 동일한 바이트 코드로 변환된다는 의미입니다.

제네릭을 사용하여 컴파일하면, 바이트 코드는 오직 원시 자료형만을 사용하도록 변환됩니다. 즉, 제네릭의 제거는 이러한 원시 자료형의 제네릭이 없어진다는 뜻이며, 컴파일된 바이트 코드에는 일반적으로 제네릭에 대한 정보가 포함되지 않습니다.

요약

제네릭은 자바에서 컴파일 시간에만 사용되며, 실행 시간에는 자료형 정보가 제거됩니다. 이는 바이트 코드로 변환될 때 해당 정보가 사라지는 결과를 초래합니다.

참고 자료