[java] Javassist의 클래스 검사 및 수정 기능

Javassist는 자바 언어를 사용하여 클래스 파일을 동적으로 생성, 수정 및 조작할 수 있는 라이브러리입니다. 이 라이브러리를 사용하면 실행 중인 애플리케이션에서 클래스를 동적으로 조작하여 코드를 검증하고 수정할 수 있습니다.

클래스 로딩 및 검사

Javassist를 사용하여 클래스를 로딩하고 검사하는 것은 매우 간단합니다. 다음은 예시 코드입니다:

ClassPool pool = ClassPool.getDefault();
CtClass ctClass = pool.get("com.example.MyClass");

// 클래스의 메서드 목록 가져오기
CtMethod[] methods = ctClass.getDeclaredMethods();
for (CtMethod method : methods) {
    System.out.println(method.getName());
}

// 클래스 필드 가져오기
CtField[] fields = ctClass.getDeclaredFields();
for (CtField field : fields) {
    System.out.println(field.getName());
}

위의 코드는 com.example.MyClass 클래스를 로딩하고, 해당 클래스의 메서드와 필드를 가져와 출력하는 예시입니다. Javassist를 사용하면 클래스의 구조를 동적으로 조사할 수 있으므로, 어떤 유형의 검사 작업이든 수행할 수 있습니다.

클래스 수정

Javassist를 사용하면 클래스 파일을 수정할 수 있습니다. 다음은 예시 코드입니다:

ClassPool pool = ClassPool.getDefault();
CtClass ctClass = pool.get("com.example.MyClass");

// 메서드 추가
CtMethod newMethod = CtNewMethod.make("public void newMethod() { System.out.println(\"Hello World!\"); }", ctClass);
ctClass.addMethod(newMethod);

// 필드 추가
CtField newField = new CtField(CtClass.intType, "newField", ctClass);
ctClass.addField(newField);

// 클래스 파일 저장
ctClass.writeFile();

위의 코드는 com.example.MyClass 클래스에 newMethodnewField를 추가하는 예시입니다. 이렇게 클래스를 수정한 후, ctClass.writeFile()를 호출하여 변경된 클래스 파일을 저장할 수 있습니다.

참고 자료