[java] 애노테이션의 클래스패스와 런타임 클래스 로딩

자바 애노테이션은 컴파일 타임과 런타임 모두에서 중요한 역할을 합니다. 일반적으로 애노테이션은 클래스 메타데이터를 추가하는 데 사용되며, 런타임 시에 리플렉션을 통해 이 메타데이터를 읽을 수 있습니다. 이 글에서는 애노테이션을 사용할 때의 클래스패스 및 런타임 로딩에 대해 알아보겠습니다.

애노테이션의 클래스패스

애노테이션을 사용하는 프로젝트의 클래스패스는 애노테이션을 선언하고 있는 라이브러리나 모듈이 포함된 위치를 가리킵니다. 즉, 애노테이션을 정의한 클래스가 포함된 JAR 파일이나 클래스 파일이 있어야 합니다. 라이브러리를 사용하는 코드에서 애노테이션을 참조할 때 클래스패스가 올바르게 설정되어 있어야 합니다.

런타임 클래스 로딩

애노테이션은 런타임 시에 클래스로딩과 리플렉션을 사용하여 처리됩니다. 런타임 시에 애노테이션의 정보를 읽으려면 해당 애노테이션이 정의된 클래스로드되어 있어야 합니다. 런타임 시에 클래스로딩이 제대로 이루어지지 않는다면 애노테이션을 올바르게 처리할 수 없습니다.

예제 코드

다음은 애노테이션을 사용한 간단한 예제 코드입니다.

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
    String value();
}

public class MyClass {
    @MyAnnotation("example")
    public void myMethod() {
        // 메소드 내용
    }
}

위의 예제에서 @Retention(RetentionPolicy.RUNTIME)은 해당 애노테이션이 런타임 시에도 유지되어야 한다는 의미입니다. 또한, @Target(ElementType.METHOD)는 해당 애노테이션이 메소드에 적용된다는 것을 나타냅니다. MyClass 클래스의 myMethod 메소드에 @MyAnnotation 애노테이션이 적용되어 있습니다.

결론

애노테이션을 사용할 때에는 애노테이션을 정의한 라이브러리가 올바른 클래스패스에 있어야 하며, 런타임 시에 해당 애노테이션을 사용하는 클래스가 올바르게 로딩되어 있어야 합니다. 올바른 클래스패스 설정과 런타임 클래스 로딩을 유의하여 애노테이션을 활용해 보세요.

참고 자료

  1. The Java™ Tutorials: Annotations
  2. Understanding Java Classpath
  3. Java Annotations Tutorial