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부터는 사용하지 않는다고 한다. 그러니 굳이 사용할 필요는 없어 보인다.
'Java' 카테고리의 다른 글
[자바] 쉬프트 연산자 (0) | 2023.06.15 |
---|---|
[JAVA] getBytes()와 String생성자로 인코딩 디코딩하기 (0) | 2023.06.13 |
clone 메서드의 문제점 (얕은 복사, 깊은 복사) (0) | 2023.06.07 |
자바 내 코드 성능 테스트 방법 (1) | 2023.06.06 |
String Class의 특징 (0) | 2023.06.05 |