어노테이션의 사전적 정의는 주석이다. 하지만 우리가 일반적으로 말하는 JAVA의 주석과는 다르다.
어노테이션은 코드에 메타데이터를 제공. 이는 코드의 의미를 명확하게 하고, 코드의 동작을 변경하거나 프레임워크와 상호작용하는 방법을 제공.
형태는 ‘@…’로 클래스, 인터페이스, 메소드, 필드, 지역 변수 위에 사용 가능.
• 어노테이션을 사용하는 이유 (효과) 는 무엇일까?
• 나만의 어노테이션은 어떻게 만들 수 있을까?
커스텀 어노테이션 - 필요한 기능을 직접 구현한 어노테이션
<예시 1.>
//함수와 클래스에 사용가능
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomAnnotation {
//별칭
//@CustomAnnotation("testvalue")와 @CustomAnnotation(name = "testvalue")을 동일하게 사용 가능
@AliasFor("value")
String name() default "defaultValue";
@AliasFor("name")
String value() default "defaultValue";
String[] stringArr() default "";
}
@Target - 어노테이션이 적용될 수 있는 타켓을 지정한다. 하나일 경우에는 ‘@Target(ElementType.TYPE)’처럼 작성되고 복수 타겟에 적용될 때에는 위처럼 배열형식으로 작성한다.
@Retention - 어노테이션의 유지 정책을 지정
@AliasFor - 필수요소는 아니지만, 스프링의 어노테이션들의 내부 코드를 보면 자주 보이는 요소이다. 이는 어노테이션 속성에 별칭을 정의한다. 동일한 값에 대해 여러 속성 이름을 사용할 수 있다.
default - 디폴트 값을 지정할 수 있다.
커스텀 어노테이션은 실무에서 꼭 필요한 경우에만 사용하도록 한다. 커스텀 어노테이션이 다수 존재하면 코드를 읽는 데에 불편함을 겪는다. 최대한 기존에 존재하는 어노테이션들을 이용하자.
추가 내용 및 의문점
참고 링크