프로그래밍 노트/JAVA

Class 클래스

깡냉쓰 2019. 10. 21. 23:17
728x90
반응형

Class 클래스

자바는 클래스와 인터페이스의 메타데이터를 java.lang 패키지에 소속된 Class 클래스로 관리한다.

(메타 데이터 : 클래스의 이름, 생성자 정보, 필드 정보, 메소드 정보)

Class 객체 얻기(getClass(), forName())

최상위 클래스인 Object의 getClass()메소드를 이용해서 Class 객체를 얻을 수 잇다.

// 해당 클래스로 객체를 생성했을 때
Class clazz = obj.getClass();
// 객체를 생성하기전 Class 객체 얻기
try{
        Class clazz = Class.forName(String className);
}catch(ClassNotFoundException e){

}

예제코드

package basic;

public class ClassExample {
    public static void main(String[] args) {
        ClassExample car = new ClassExample();
        Class clazz1 = car.getClass();
        System.out.println(clazz1.getName());
        System.out.println(clazz1.getSimpleName());
        System.out.println(clazz1.getPackage().getName());
        System.out.println();


        try {
            Class clazz2 = Class.forName("basic.ClassExample");
            System.out.println(clazz2.getName());
            System.out.println(clazz2.getSimpleName());
            System.out.println(clazz2.getPackage().getName());
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}
basic.ClassExample
ClassExample
basic

basic.ClassExample
ClassExample
basic

리플렉션(getDeclaredConstructors(), getDeclaredFields(), getDeclaredMethods())

Class 객체를 이용하면 클래스의 생성자, 필드, 메소드 정보를 알아낼 수 있다.(리플렉션)

Constructor[] constructors = clazz.getDeclaredConstructors();
Field[] fields = clazz.getDeclaredFields();
Method[] methods = clazz.getDeclaredMethods();

동적 객체 생성(newInstance())

Class 객체를 이용하면 new연산자를 사용하지 않고 동적으로 객체를 생성할 수 있다.

⇒ 런타임 시에 클래스 이름이 결정되는 경우 유용하게 사용할 수 있다.

try{
        Class clazz = Class.forName("런타임 시 결정되는 클래스 이름");
        Object obj = clazz.newInstance();
}catch(Exception e){

}
728x90
반응형