[java] Javassist를 이용한 동적 로딩 및 언로딩

소개

Javassist는 자바 코드를 조작하고 생성하는 데 사용되는 라이브러리입니다. 이 라이브러리를 사용하여 동적으로 클래스를 로딩하고 언로딩하는 방법을 알아보겠습니다.

동적 로딩

Javassist를 사용하여 동적으로 클래스를 로딩하는 방법은 다음과 같습니다:

ClassPool pool = ClassPool.getDefault();
CtClass dynamicClass = pool.makeClass("com.example.DynamicClass");

위의 코드에서는 ClassPool 객체를 생성하고, makeClass() 메서드를 사용하여 동적으로 클래스를 생성합니다. makeClass() 메서드의 인자로는 클래스의 패키지와 이름을 지정해야 합니다.

이후에는 필요한 필드, 메서드 등을 동적으로 추가하여 클래스를 조작할 수 있습니다:

CtField newField = new CtField(CtClass.intType, "newField", dynamicClass);
dynamicClass.addField(newField);

위의 코드에서는 CtField 객체를 생성하고, addField() 메서드를 사용하여 동적으로 클래스에 필드를 추가하고 있습니다.

동적 언로딩

동적으로 로딩된 클래스를 언로딩하려면 ClassLoader를 사용해야 합니다. 다음과 같이 클래스 로더를 생성하고, unloadClass() 메서드를 호출하여 클래스를 언로딩할 수 있습니다:

ClassLoader loader = dynamicClass.getClassLoader();
loader.removeClass(dynamicClass.getName());

위의 코드에서는 getClassLoader() 메서드를 사용하여 동적으로 생성된 클래스의 클래스 로더를 가져옵니다. 그 후 removeClass() 메서드를 호출하여 클래스를 언로딩합니다.

정리

Javassist를 사용하여 동적으로 클래스를 로딩하고 언로딩하는 방법을 살펴보았습니다. 이를 활용하면 프로그램 실행 중에 클래스를 동적으로 생성하거나 조작할 수 있습니다.

참고 자료