HOWTO · Java

Java에서 객체의 런타임 클래스 가져오기

Java에는 typeof 연산자가 없습니다. null이 아닌 객체 참조에서 getClass()를 호출해 런타임 클래스를 확인하고, 래퍼 객체에 적용하는 방법을 알아봅니다.

이 페이지의 내용

Java에는 typeof 연산자가 없습니다. 객체의 런타임 클래스를 확인하려면 null이 아닌 객체 참조에서 getClass()를 호출합니다. int나 char 같은 기본형 값은 객체가 아니므로 이 메서드를 직접 호출할 수 없습니다. 이 방법을 기본형에 적용하려면 먼저 해당 값을 박싱해야 합니다. 기존 객체의 실제 클래스가 필요할 때 getClass()를 사용할 수 있으며, Java에서 타입 정보를 다루는 방법이 이것뿐인 것은 아닙니다.
타입과 연산자에 대한 질문은 Java 튜토리얼에서 함께 묶여 있으며, Java가 typeof 질문에 어떻게 답하는지도 포함됩니다.

Java에서 객체의 런타임 클래스 가져오기

getClass()는 Object에 정의되어 있으며, 호출 대상의 런타임 클래스를 설명하는 Class 객체를 반환합니다. 예를 들어 String 참조에서는 이 메서드를 바로 호출할 수 있습니다. 반환된 Class 객체를 출력하면 class java.lang.String처럼 패키지 이름도 표시됩니다.

다음 Java 프로그램은 문자열과 그 문자열이 참조하는 객체의 클래스를 출력합니다.

class RuntimeClassExample {
    public static void main(String[] args) {
        String message = "Hello";
        System.out.println(message);
        System.out.println("Class: " + message.getClass());
    }
}

표준 출력은 다음과 같습니다.

Hello
Class: class java.lang.String

기본형 값에서 시작한다면 getClass()를 호출하기 전에 값을 Integer나 Character 같은 래퍼 객체에 담으세요. 박싱은 기본형 값을 해당 래퍼 객체로 변환합니다. 메서드를 호출하는 순간 참조는 객체를 가리켜야 하므로, null 참조에는 호출 대상이 없습니다.

Java에서 래퍼 객체의 런타임 클래스 가져오기

래퍼 클래스는 기본형 값을 나타내는 객체를 제공하므로, 해당 객체의 런타임 클래스를 확인할 수 있습니다. 다음 예제에서는 Integer와 Character를 사용합니다. getClass()는 각 객체의 런타임 클래스를 식별하고, getSimpleName()은 패키지 이름을 제외한 짧은 클래스 이름을 반환합니다.

class WrapperClassExample {
    public static void main(String[] args) {
        Integer count = 20;
        Character letter = 'G';

        System.out.println("Integer class: " + count.getClass());
        System.out.println("Character class: " + letter.getClass());
        System.out.println("Integer simple name: " + count.getClass().getSimpleName());
        System.out.println("Character simple name: " + letter.getClass().getSimpleName());
    }
}

이 호출들이 나타내는 클래스 이름은 java.lang.Integer와 java.lang.Character이며, 각 클래스의 짧은 이름은 Integer와 Character입니다.