getDeclaredConstructor().newInstance()는 자바 Reflection API의 일부로 사용되며, 클래스의 새 인스턴스를 동적으로 생성할 때 사용됩니다. Reflection API를 사용하면 실행 시간(runtime)에 프로그램의 구조를 검사하고 조작할 수 있습니다. 이것은 특히 클래스의 타입이 컴파일 타임에 알려지지 않았을 때 유용합니다.

 

2024.03.16 - [웹/Spring] - Reflection API란?

 

Reflection API란?

Reflection API란? 자바에서 클래스나 인터페이스의 메타데이터를 읽어와서 실행 시간에 객체의 속성, 메소드, 생성자 등을 검사하거나 조작할 수 있게 해주는 기능입니다. 이 API를 사용하면 컴파일

kwaksh2319.tistory.com

  • getDeclaredConstructor(): 이 메소드는 호출되는 클래스의 지정된 파라미터를 가진 생성자를 반환합니다. 파라미터가 없으면 기본 생성자를 반환합니다.
  • newInstance(): getDeclaredConstructor() 메소드로 얻은 생성자를 사용하여 클래스의 새 인스턴스를 생성합니다. 이 메소드는 해당 생성자의 public, protected, private에 관계없이 어떤 접근 제한자를 가진 생성자든지 인스턴스화할 수 있습니다.

getDeclaredConstructor().newInstance()를 사용하는 예제 코드입니다:

import java.util.HashMap;
import java.util.Map;

public class InstanceFactory {
    
    private Map<String, Class<?>> classMap = new HashMap<>();

    public InstanceFactory() {
        // Here we map strings to classes
        classMap.put("MyClass", MyClass.class);
        // Add other classes to the map as needed
    }

    public Object createInstance(String key) throws Exception {
        Class<?> clazz = classMap.get(key);
        if (clazz != null) {
            return clazz.getDeclaredConstructor().newInstance();
        }
        return null;
    }

    public static void main(String[] args) {
        InstanceFactory factory = new InstanceFactory();

        try {
            Object myClassInstance = factory.createInstance("MyClass");
            // Use myClassInstance as needed
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class MyClass {
    // MyClass definition
}

 

문자열 키를 입력받고 classMap에서 해당하는 Class<?> 객체를 찾은 다음, 리플렉션을 사용하여 해당 클래스의 새 인스턴스를 생성하는 createInstance 메소드를 가지고 있습니다.

즉 classMap 키 값을 가지는 클래스들 put하여 다른 클래스들도 이용이 가능하겠죠.

예를들어 vehicle inteface가 존재한다면 class car, bus, train 을 상속받아 쓴다고 가정하면 손쉽게 클래스명의 hash 키를 통하여 동적으로 클래스 인스턴스를 생성하여 사용할수 있습니다.

'프로그래밍언어 > JAVA' 카테고리의 다른 글

Hibernate ?  (0) 2024.03.31
순수 JAVA JPA  (0) 2024.03.17
Reflection API란?  (0) 2024.03.16
Executor, ExecutorService  (1) 2024.03.16
<JAVA>멀티스래드 프로그래밍-3  (0) 2020.12.13

+ Recent posts