6장_아이템39 - ririkat/effective-java GitHub Wiki

아이템39. 명명 패턴보다 애너테이션을 사용하라


전통적으로 도구나 프레임워크가 특별히 다뤄야 할 프로그램 요소에는 딱 구분되는 명명 패턴을 적용해왔다. 명명 패턴은 효과적인 방법이지만 단점도 크다.


명명 패턴의 단점
  • 오타가 나면 안 된다.
  • 올바른 프로그램 요소에서만 사용되리라 보증할 방법이 없다.
  • 프로그램 요소를 매개변수로 전달할 마땅한 방법이 없다.

애너테이션은 이 모든 문제를 해결해주는 멋진 개념으로, JUnit도 버전 4부터 전면 도입하였다.


메타애너테이션

  • 애너테이션 선언에 다는 애너테이션

@Target

  • 해당 애너테이션의 적용 범위를 지정해주는 메타에너테이션
  • @Target(ElementType.TYPE) 형태로 사용
ElementType.PACKAGE : 패키지 선언
ElementType.TYPE : 타입 선언
ElementType.ANNOTATION_TYPE : 어노테이션 타입 선언
ElementType.CONSTRUCTOR : 생성자 선언
ElementType.FIELD : 멤버 변수 선언
ElementType.LOCAL_VARIABLE : 지역 변수 선언
ElementType.METHOD : 메서드 선언
ElementType.PARAMETER : 전달인자 선언
ElementType.TYPE_PARAMETER : 전달인자 타입 선언
ElementType.TYPE_USE : 타입 선언

@Retention

  • 해당 애너테이션의 유지 범위를 표시하는 메타애너테이션
  • @Retention(RetentionPolicy.~) 형식으로 사용
RetentionPolicy.RUNTIME  // 컴파일 전까지만 유효
RetentionPolicy.CLASS    // 컴파일러가 클래스를 참조할 때까지 유효
RetentionPolicy.SOURCE   // 컴파일 이후에도 JVM 에 의해서 계속 참조가 가능

@Repeatable

  • 해당 어노테이션을 반복정의하게 해주는 메타애너테이션
⚠️ **GitHub.com Fallback** ⚠️