본문 바로가기

Java

getClass()

getClass()는 Object클래스의 메서드로 자신이 속한 클래스의 Class 객체를 반환해 주는 메서드이다.

Class 객체란 클래스 이름이 Class인 클래스로 만들어진 객체이며 클래스의 모든 정보를 담고 있다. (클래스당 1개만 존재한다.)   이 Class 객체는 생성자가 private로 되어 있기 때문에 우리가 사용하는 것이 아니라 javac에 의해 컴파일된 클래스 파일이 클래스 로더에 의해 메모리에 올라갈 때 자동으로 생성된다.

클래스 로더란 실행 시에 필요한 클래스를 동적으로 메모리에 로드하는 역할을 한다. 먼저 기존에 생성된 클래스 객체가 메모리에 존재하는지 확인하고 없으면 클래스 패스에 지정된 경로를 따라서 클래스 파일을 찾는다. 못 찾으면 ClassNotFoundException이 발생하고, 찾으면 해당 클래스 파일을 읽어서 Class객체로 변환해 준다.

 

Class객체를 얻는 3가지 방법

1. 생성된 클래스로부터 getClass()를 사용해 Class객체의 참조를 얻는다.

Class cObj = new Student(). getClass(); 

2. 클래스 리터럴로 부터 얻는다. 

Class cObj2 = Student.class;

3. Class객체에 static으로 선언된 forName() 메서드를 이용해 얻는다.

try {
    cObj3 = Class.forName("test.Student");
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

이 메서드는 ClassNotFoundException예외를 던지고 있기 때문에 반드시 try catch로 감싸 주어야 한다. 

이 방법은 데이터베이스 드라이버를 메모리에 올릴 때 주로 사용한다. 

 

Class객체를 이용해 새로운 객체 생성방법

Student student = null;
try {
     // 버전 9부터는 사용하지 않는다.
     student = Student.class.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
System.out.println(student);

이렇게 Class객체에 있는 newInstance()를 통해 인스턴스를 생성할 수 있지만 이 메서드는 버전 9부터는 사용하지 않는다고 한다. 그러니 굳이 사용할 필요는 없어 보인다.