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 |