어노테이션은 자바 소스코드에 메타데이터를 추가하는 방법 중 하나로,코드에 대한 정보를 제공하거나 컴파일러에게 추가적인 처리를 요청하는 데 사용된다!
어노테이션을 사용하는 이유를 크게 3가지로 나눠보자면 아래와 같다.
어노테이션은 코드에 대한 부가적인 정보를 제공하여 코드의 의도나 사용법을 명확하게 문서화할 수 있다! 예를 들어, @Override 어노테이션은 메서드가 부모 클래스의 메서드를 재정의하고 있음을 나타내주어 코드 읽는 사람에게 명확한 정보를 제공해준다!
어노테이션을 사용하여 컴파일러에게 추가적인 검사를 요청할 수 있으며 이를 통해 코드의 안전성을 높이고 오류를 미리 방지할 수 있다!
예를 들어, @Autowired 어노테이션을 사용하여 의존성 주입을 요청하며, 컴파일 시에 해당 의존성이 존재하지 않을 경우 오류를 발생시킨다!
어노테이션 프로세서를 사용하여 어노테이션에 따라 코드를 생성하거나 추가적인 처리를 수행할 수 있다. 예를 들어, Lombok 라이브러리는 @Getter, @Setter 어노테이션을 사용하여 자동으로 getter와 setter 메소드를 생성해준다!
커스텀 어노테이션을 만들려면 @interface 키워드를 사용하여 인터페이스를 정의해야 한다! 이 인터페이스는 어노테이션의 구조를 정의하며, 해당 어노테이션이 가질 수 있는 요소들을 선언한다.
아래는 간단한 커스텀 어노테이션을 만드는 예시이다.
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME) // 이 어노테이션을 런타임까지 유지
@Target(ElementType.METHOD) // 이 어노테이션을 메서드에 사용할 수 있음
public @interface MyCustomAnnotation {
// 어노테이션의 요소들 정의
String value() default ""; // 기본값은 빈 문자열
int number() default 0; // 기본값은 0
}
위 코드에서는 MyCustomAnnotation이라는 커스텀 어노테이션을 정의하고 있다. 이 어노테이션은 두 개의 요소(value, number)를 가지고 있다. 그리고 이 어노테이션은 런타임까지 유지되며, 메서드에만 사용할 수 있다.
그리고 이를 사용하는 예시 코드는 아래와 같다.
public class MyClass {
@MyCustomAnnotation(value = "Hello", number = 42)
public void myMethod() {
// 메서드 내용
}
}
위의 코드에서는 MyClass에 있는 myMethod 메서드에 @MyCustomAnnotation을 적용하고 있으며, 이 때 어노테이션의 요소들에 값들을 할당하고 있다!