[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의 클래스를 사용하여 동적 코드를 생성하고 컴파일할 수 있습니다.