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