자바 어노테이션은 자바 소스 코드에 메타데이터(Metadata)를 추가하기 위한 방법으로, 컴파일러에게 추가적인 정보를 제공하거나 런타임에 프로그램 동작을 변경할 수 있습니다. 어노테이션은 @
기호를 사용하여 선언하며, 클래스, 메소드, 필드 등 다양한 요소에 적용할 수 있습니다.
내장 어노테이션(Built-in annotations)
자바에서는 이미 여러 내장 어노테이션들이 제공되고 있습니다. 대표적인 내장 어노테이션들은 다음과 같습니다:
@Override
: 메소드가 슈퍼 클래스의 메소드를 재정의하는 것을 나타냅니다.@Deprecated
: 해당 요소가 더 이상 권장되지 않음을 나타냅니다. 사용을 지양하고 대신 대체할 수 있는 대안을 제공해야 합니다.@SuppressWarnings
: 특정 경고 메시지가 발생하지 않도록 무시하도록 지시합니다.@FunctionalInterface
: 함수형 인터페이스임을 나타냅니다. 하나의 추상 메소드만을 가져야 합니다.
커스텀 어노테이션(Custom annotations)
여러분은 자신만의 어노테이션도 정의할 수 있습니다. 커스텀 어노테이션을 정의하기 위해서는 @interface
키워드를 사용하여 어노테이션을 선언합니다. 예를 들어, 다음은 @RunWith
어노테이션의 간단한 구현 예시입니다:
public @interface RunWith {
Class<?> value();
}
커스텀 어노테이션은 필요한 매개변수를 가질 수 있으며, @Retention
을 사용하여 어노테이션의 유지 정책을 설정할 수도 있습니다.
어노테이션 프로세서(Annotation Processors)
어노테이션 프로세서는 컴파일 타임에 어노테이션을 처리하는 도구입니다. 이를 통해 어노테이션에 지정된 정보를 알아내거나 코드를 생성할 수 있습니다.
자바 6부터는 javax.annotation.processing
패키지를 사용하여 어노테이션 프로세서를 작성할 수 있습니다. 특정 어노테이션을 처리하기 위해 @SupportedAnnotationTypes
어노테이션을 사용하여 프로세서가 처리할 어노테이션을 명시하고, process()
메소드에서 실제 처리 작업을 수행합니다.
@SupportedAnnotationTypes("com.example.MyAnnotation")
public class MyAnnotationProcessor extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
// 어노테이션 처리 작업 수행
return true;
}
}
결론
자바 어노테이션은 자바 개발의 다양한 측면에서 유용하게 사용될 수 있습니다. 내장 어노테이션을 활용하거나 커스텀 어노테이션을 정의하여 코드의 가독성과 유지 보수성을 향상시킬 수 있습니다. 또한 어노테이션 프로세서를 활용하여 자동화된 코드 생성 등의 작업을 수행할 수 있습니다.
더 자세한 내용은 공식 Java 문서를 참고하시기 바랍니다.