[java] Javassist를 활용한 동적 코드 실행

Javassist는 자바 프로그래밍 언어를 사용하여 동적으로 코드를 생성하고 수정하는 데 사용되는 라이브러리입니다. 이를 통해 애플리케이션을 실행 중에 코드를 변경하거나 새로운 코드를 동적으로 생성할 수 있습니다.

Javassist 라이브러리 추가하기

Javassist를 사용하기 위해서는 우선 해당 라이브러리를 프로젝트에 추가해야 합니다. Maven의 경우, pom.xml 파일에 다음 의존성을 추가합니다:

<dependency>
    <groupId>javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.28.0-GA</version>
</dependency>

Gradle을 사용하는 경우, build.gradle 파일에 다음 의존성을 추가합니다:

implementation 'javassist:javassist:3.28.0-GA'

동적 코드 생성하기

다음은 Javassist를 사용하여 동적으로 코드를 생성하는 예제입니다. 예제에서는 간단한 클래스를 생성하고 메서드를 추가하고 실행하는 방법을 보여줍니다.

import javassist.*;

public class DynamicCodeExample {
    public static void main(String[] args) throws Exception {
        ClassPool classPool = ClassPool.getDefault();

        // 동적으로 생성할 클래스
        CtClass dynamicClass = classPool.makeClass("DynamicClass");

        // 메서드 생성
        CtMethod sayHelloMethod = CtNewMethod.make("public void sayHello() { System.out.println(\"Hello, Javassist!\"); }", dynamicClass);
        dynamicClass.addMethod(sayHelloMethod);

        // 클래스 로딩 및 인스턴스 생성
        Class<?> clazz = dynamicClass.toClass();
        Object instance = clazz.getDeclaredConstructor().newInstance();

        // 동적으로 생성한 메서드 실행
        clazz.getMethod("sayHello").invoke(instance);
    }
}

위의 예제는 DynamicCodeExample이라는 클래스를 동적으로 생성하고, sayHello() 메서드를 추가한 뒤 실행하는 방법을 보여줍니다. CtClass, CtMethod 등 Javassist의 클래스를 사용하여 동적 코드를 생성하고 컴파일할 수 있습니다.

참고 자료