커스텀 어노테이션 이란?

이경영·2022년 11월 2일
0

스프링부트

목록 보기
11/12
post-custom-banner

잠깐? @interface는 뭘까?

커스텀 어노테이션

메타 어노테이션을 사용하여 다음과 같은 구조를 가짐

  • 메타 어노테이션 : 커스텀 어노테이션을 구성할 때 시점, 위치 등을 지정하기 위한 어노테이션
    이노테이션의 필드 타입은 enum, String, 기본자료형, 기본자료형의 배열만 사용할 수 있다.
@Target({ElementType.[적용대상]})
@Retention(RetentionPolicy.[정보유지되는 대상])
public @interface [어노테이션명]{
	public 타입 elementName() [default 값]
    ...
}

메타 어노테이션의 종류

@Retention : 컴파일러가 어노테이션을 다루는 방법을 기술, 어느 시점까지 영향을 미치는지를 결정
RetentionPolicy.SOURCE : 컴파일 전까지만 유효
RetentionPolicy.CLASS : 컴파일러가 클래스를 참조할 때까지 유효
RetentionPolicy.RUNTIME : 컴파일 이후 런타임 시기에도 JVM에 의해 참조가 가능(리플렉션)

@Target : 어노테이션 적용할 위치 선택
ElementType.PACKAGE : 패키지 선언
ElementType.TYPE : 타입 선언
ElementType.ANNOTATION_TYPE : 어노테이션 타입 선언
ElementType.CONSTRUCTOR : 생성자 선언
ElementType.FIELD : 멤버 변수 선언
ElementType.LOCAL_VARIABLE : 지역 변수 선언
ElementType.METHOD : 메서드 선언
ElementType.PARAMETER : 전달인자 선언
ElementType.TYPE_PARAMETER : 전달인자 타입 선언
ElementType.TYPE_USE : 타입 선언

@Documented : 해당 어노테이션을 Javadoc에 포함시킴
@Inherited : 어노테이션의 상속을 가능하게 함
@Repeatable : Java8 부터 지원하며, 연속적으로 어노테이션을 선언할 수 있게 함

어노테이션 동작 원리

  • 어노테이션의 타입선언은 특별한 종류의 인터페이스로 친다.
    일반 인터페이스와의 구분을 위해 @interface를 붙여 선언

  • @interface는 자동으로 Annotation 클래스를 상속(확장)하며,
    내부의 메소드들은 abstract 키워드가 자동으로 붙게된다.

  • 커스텀 어노테이션은 extends절을 가질 수 없다.(이미 자동 상속받고 있기 때문)

    • 추가적인 제약
      어노테이션 타입 선언은 제네릭일 수 없다.
      메소드는 매개변수를 가질 수 없다.
      메소드는 타입 매개변수를 가질 수 없다.
      메소드 선언은 throws 절을 가질 수 없다.

출처 : https://velog.io/@potato_song/Java-%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98-%EC%BB%A4%EC%8A%A4%ED%85%80-%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98-%EB%A7%8C%EB%93%A4%EA%B8%B0

profile
꾸준히
post-custom-banner

0개의 댓글