Java Class 클래스
Class 클래스는 객체나 인터페이스의 런타임 상태를 저장한다. Class 타입의 객체는 클래스가 로드 될 때 자동으로 생성된다. Class 객체를 명시적으로 선언할 수 없으며, 일반적으로 Object 클래스의 getClass() 메소드를 이용하여 Class 객체를 얻는다.
Class 생성자
메소드 | 설명 |
---|---|
static Class<?> forName(String className) |
매개변수로 className을 받아서 클래스를 로딩한 후에, 그 클래스에 해당하는 Class 객체를 반환한다. |
String getName() |
클래스명을 반환한다. |
Class<? super T> getSuperclass() |
상위 클래스를 반환한다. |
T newInstance() |
Class가 포함하고 있는 클래스의 인스턴스를 생성한다. |
Class 예제
예제 1)
package com.devkuma.tutorial.java.lang;
class Parent {
int a = 2;
int b = 3;
}
class Child extends Parent {
int c = 4;
}
public class ClassClass {
public static void main(String[] args) {
Parent p = new Parent();
Child c = new Child();
Class<?> pc = p.getClass();
Class<?> cc = c.getClass();
System.out.println("pc ClassName:" + pc.getName());
System.out.println("pc Super ClassName:" + pc.getSuperclass().getName());
System.out.println("cc ClassName:" + cc.getName());
System.out.println("cc Super ClassName:" + cc.getSuperclass().getName());
}
}
실행 결과:
pc ClassName:com.devkuma.tutorial.javalang.Parent
pc Super ClassName:java.lang.Object
cc ClassName:com.devkuma.tutorial.javalang.Child
cc Super ClassName:com.devkuma.tutorial.javalang.Parent
예제를 보면 클래스명과 상위 클래스명으로 화면에 표시해 주고 있는걸 확인 할 수 있다.
예제 2)
package com.devkuma.tutorial.javalang;
class Calc {
int a = 2;
int b = 3;
public int sum() {
return a + b;
}
}
public class ClassClass2 {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
Class<?> clazz = Class.forName("com.devkuma.tutorial.javalang.Calc");
Calc calc = (Calc) clazz.newInstance();
System.out.println("sum : " + calc.sum());
}
}
실행 결과:
sum : 5
여태까지 객체를 생성하기 위해서 new
을 사용하여 객체를 생성했다. 위에 예제는 new
를 이용하지 않고 Class.forName
과 newInstance()
메소들 이용해서 객체를 생성하였다. 이는 클래스가 로딩을 할 때 로딩이 되는 것이 아니라 Class.forName()
을 실행 시켰을 때 로딩이 된다. 이를 런타임 동적 로딩이라고 한다. 이 방식을 보안적이나 품질적으로 문제가 있을 수 있으니 jdbc로딩과 같은 특별한 경우를 제외하고는 이렇게 클래스를 생성을 하는 일을 없어야 한다.
최종 수정 : 2021-08-27