본문으로 건너뛰기
Advertisement

애너테이션 (Annotation)

애너테이션(Annotation)은 프로그램의 소스 코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것입니다. 보통 프로그램 실행에 영향을 주지 않고, 컴파일러나 특정 프레임워크가 코드를 분석하거나 런타임에 처리할 수 있도록 힌트를 제공합니다.

기본적으로 주석(// 또는 /* */)과 동일하게 동작하지만, 애너테이션은 기계(컴파일러 등)도 읽고 처리할 수 있다는 차이점이 있습니다.

1. 표준 애너테이션

자바에서 기본적으로 제공하는 대표적인 표준 애너테이션은 다음과 같습니다:

  • @Override: 컴파일러에게 오버라이딩하는 메서드라는 것을 알립니다. 오타가 있거나 부모 클래스에 동일한 서명의 메서드가 없다면 컴파일 에러를 발생시킵니다.
  • @Deprecated: 앞으로 사용하지 않을 것을 권장하는 필드나 메서드에 붙입니다. 이를 사용할 경우 컴파일러가 경고를 발생시킵니다.
  • @SuppressWarnings: 컴파일러의 특정 경고 메시지가 나타나지 않게 억제합니다.
class Parent {
public void printMessage() {
System.out.println("Hello");
}
}

class Child extends Parent {
@Override // 컴파일러에게 오버라이딩 메서드임을 명시
public void printMessage() {
System.out.println("Hello, Child!");
}

@Deprecated // 이제 더 이상 이 메서드의 사용을 권장하지 않음
public void oldMethod() {
System.out.println("Old method");
}
}

2. 메타 애너테이션 (Meta Annotations)

메타 애너테이션은 애너테이션을 위한 애너테이션 으로, 커스텀 애너테이션을 정의할 때 그 애너테이션의 적용 대상이나 유지 기간 등을 지정하는 데 사용됩니다.

  • @Target: 애너테이션이 적용될 수 있는 대상(클래스, 메서드, 필드 등)을 지정합니다.
  • @Retention: 애너테이션이 유지되는 기간을 지정합니다 (SOURCE, CLASS, RUNTIME).
  • @Documented: 애너테이션에 대한 정보가 javadoc으로 작성된 문서에 포함되도록 합니다.
  • @Inherited: 애너테이션이 자손 클래스에 상속되도록 합니다.

3. 커스텀 애너테이션 만들기

개발자가 직접 애너테이션을 만들어 프레임워크(예: Spring 등)나 Reflection API와 결합해 특정한 동작을 하도록 만들 수 있습니다.

import java.lang.annotation.*;

@Target({ElementType.METHOD, ElementType.TYPE}) // 클래스와 메서드에 적용 가능
@Retention(RetentionPolicy.RUNTIME) // 런타임까지 애너테이션 유지
public @interface MyCustomAnnotation {
String value() default "Default Value"; // 기본값을 갖는 요소
int count() default 1;
}

애너테이션의 활용법 (리플렉션)

이렇게 만든 애너테이션은 리플렉션(Reflection)을 통해 런타임에 정보를 읽어올 수 있습니다.

@MyCustomAnnotation(value = "테스트 클래스", count = 5)
public class AnnotationTest {
public static void main(String[] args) {
// AnnotationTest 클래스에 적용된 MyCustomAnnotation 정보를 가져옴
MyCustomAnnotation anno = AnnotationTest.class.getAnnotation(MyCustomAnnotation.class);

System.out.println("Value: " + anno.value()); // 테스트 클래스
System.out.println("Count: " + anno.count()); // 5
}
}

스프링 프레임워크나 JPA 등 현대 자바 기술 스택의 핵심 기반이 바로 이 애너테이션 기능입니다!

Advertisement