Java에서 Reflection을 이용하여 클래스의 인스턴스를 생성하고, 인스턴스안에 있는 필드에 값을 추가하는 방법은 아래와 같습니다. 예를 들어 아래와 같이 Book 클래스가 있다고 가정할 때, 해당 클래스의 인스턴스를 생성하는 방법은 아래와 같습니다.
// Book.java
public class Book {
String title;
String author;
public Book() {}
}
// Main
public static void Main(String[] args) {
// 클래스에 대한 정보를 가져옵니다.
Class<?> classType = Book.getClass();
// 클래스에 선언된 기본 생성자 정보를 가져옵니다.
Constructor<?> classConstructor = classType.getConstructor();
// 가져온 기본 생성자를 통해 인스턴스를 생성합니다.
Object classInstance = classConstructor.newInstance();
assert classInstance instanceof Book;
}
위와 같이 생성한 인스턴스에 존재하는 필드에 값을 설정하는 방법은 아래와 같습니다.
// Book.java
public class Book {
String title;
String author;
public Book() {}
@Override
public String toString() {
return "{ title: " + title + ", author: " + author + "}";
}
}
// Main
public static void Main(String[] args) {
// 클래스에 대한 정보를 가져옵니다.
Class<?> classType = Book.getClass();
// 클래스에 선언된 기본 생성자 정보를 가져옵니다.
Constructor<?> classConstructor = classType.getConstructor();
// 가져온 기본 생성자를 통해 인스턴스를 생성합니다.
Object classInstance = classConstructor.newInstance();
// 클래스에 선언된 필드를 찾습니다.
for (Field field : classType.getDeclaredFields()) {
String fieldName = field.getName();
// 필드의 이름을 모두 대문자로 변환한 값을 필드의 값으로 설정합니다.
classType.getField(fieldName).set(classIntance, fieldName.toUpperCase());
}
assert classInstance instanceof Book;
System.out.println(classInstance.toString());
}
댓글