Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java getClass() 메서드란? 개념과 활용 방법 총정리

Java의 getClass() 메서드는 모든 클래스의 최상위 조상인 Object 클래스에 정의되어 있으며, 호출한 객체의 Class 클래스 인스턴스를 반환합니다. 객체의 새로운 인스턴스를 선언하면 해당 객체는 반드시 특정 클래스를 참조하게 되는데, JVM 내에서 각 클래스는 단 하나만 존재하지만 그 클래스를 참조하는 객체는 여러 개일 수 있습니다. 따라서 서로 다른 두 객체의 클래스를 조회했을 때 동일한 클래스를 가리키는 경우가 발생할 수 있습니다.

getClass() 메서드 문법

public final Class<?> getClass()

getClass()는 final로 선언되어 있어 하위 클래스에서 오버라이딩할 수 없으며, 항상 실제 런타임 클래스 정보를 정확하게 반환한다는 특징이 있습니다.

getClass() 메서드 예제

class User {
    private int id;
    private String name;
    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }
}
class SpecificUser extends User {
    private String specificId;
    public SpecificUser(String specificId, int id, String name) {
        super(id, name);
        this.specificId = specificId;
    }
}
public class TestUser {
    public static void main(String[] args){
        User user = new User(115, "Raja");
        SpecificUser specificUser = new SpecificUser("AAA", 120, "Adithya");
        User anotherSpecificUser = new SpecificUser("BBB", 125, "Jai");

        System.out.println(user.getClass());
        System.out.println(specificUser.getClass());
        System.out.println(anotherSpecificUser.getClass());
    }
}

실행 결과

class User
class SpecificUser
class SpecificUser

결과 분석

위 예제를 살펴보면 user 변수는 User 타입으로 선언되어 있으므로 getClass() 호출 시 User 클래스가 출력됩니다. 반면 specificUseranotherSpecificUser는 선언된 타입은 다르지만, 실제 생성된 객체는 모두 SpecificUser입니다. 이처럼 getClass()는 컴파일 시점의 참조 변수 타입이 아니라 런타임에 실제 생성된 객체의 클래스를 반환하기 때문에, 다형성(polymorphism) 상황에서도 정확한 클래스 정보를 확인할 수 있습니다.

getClass() 메서드의 주요 활용 사례

  • 객체 타입 검증: equals() 메서드를 재정의할 때 전달된 객체가 같은 클래스인지 비교하는 용도로 널리 사용됩니다.
  • 리플렉션(Reflection): 반환된 Class 객체를 통해 클래스 이름, 필드, 메서드, 생성자 등의 메타데이터를 동적으로 조회하고 조작할 수 있습니다.
  • 디버깅 및 로깅: 실행 중인 객체의 실제 클래스 정보를 확인하여 로그를 남기거나 문제를 추적할 때 유용합니다.