[java] 리플렉션을 사용한 클래스 정보 변경

리플렉션이란 실행 중에 클래스의 정보를 분석하고 수정할 수 있는 기능을 말합니다. Java에는 java.lang.reflect 패키지에 여러 클래스와 인터페이스가 포함되어 있어 이를 통해 리플렉션 기능을 사용할 수 있습니다. 이 기능을 사용하면 실행 중에 클래스의 필드, 메소드, 생성자 등의 정보를 얻거나 수정할 수 있습니다.

이번 포스팅에서는 Java 리플렉션을 사용하여 클래스의 정보를 변경하는 방법에 대해 알아보겠습니다.

1. 클래스 정보 얻기

리플렉션을 이용하여 클래스의 정보를 얻으려면 Class 클래스를 이용합니다. 아래는 클래스의 정보를 얻는 간단한 예제 코드입니다.

import java.lang.reflect.*;

public class Main {
    public static void main(String[] args) {
        Class<?> clazz = MyClass.class;
        Field[] fields = clazz.getDeclaredFields();
        
        for (Field field : fields) {
            System.out.println("Field name: " + field.getName());
            System.out.println("Field type: " + field.getType().getName());
        }
    }
}

class MyClass {
    private int myInt;
    public String myString;
}

위 코드는 MyClass의 필드 정보를 출력하는 간단한 예제입니다.

2. 클래스 정보 수정하기

리플렉션을 사용하여 클래스 정보를 수정하려면 Field, Method, Constructor 등을 이용합니다. 아래는 필드의 값을 수정하는 예제 코드입니다.

import java.lang.reflect.*;

public class Main {
    public static void main(String[] args) throws Exception {
        MyClass obj = new MyClass();
        Class<?> clazz = obj.getClass();
        Field field = clazz.getDeclaredField("myInt");
        field.setAccessible(true);
        field.setInt(obj, 10);
        
        System.out.println(obj.getMyInt());
    }
}

class MyClass {
    private int myInt;
    
    public int getMyInt() {
        return myInt;
    }
}

위 코드는 MyClassmyInt 필드의 값을 변경하는 예제입니다.

마치며

Java의 리플렉션을 사용하면 실행 중에 클래스의 정보를 동적으로 분석하고 수정할 수 있습니다. 하지만 신중하게 사용해야 하며, 잘못 사용할 경우 예기치 않은 문제가 발생할 수 있습니다.

리플렉션을 사용할 때는 항상 보안 상의 이슈성능 저하에 대해 고려해야 합니다.