본문 바로가기

프로그래밍 정보&자료

자바 Annotation

 어노테이션(Annotation)은 Java 5부터 등장한 기능이다. 어노테이션은 본질적인 목적은 소스 코드에 메타데이터를 표현하는 것이다.

 기본적으로 제공되는 어노테이션의 목록은 다음과 같다.

  1. @Override
    • 선언한 메소드가 오버라이드 되었다는 것을 나타낸다.
    • 만약 상위(부모) 클래스(또는 인터페이스)에서 해당 메소드를 찾을 수 없다면 컴파일 에러를 발생시킨다.
  2. @Depricated
    • 해당 메소드가 더 이상 사용되지 않음을 표시한다.
    • 만약 사용할 경우 컴파일 경고를 발생시킨다.
  3. @SuppressWarnings
    • 선언한 곳의 컴파일 경고를 무시하도록 한다.
  4. @SafeVarargs
    • 자바7부터 지원하며, 제네릭 같은 가변인자의 매개변수를 사용할 때의 경고를 무시한다.
  5. @FunctionalInterface
    • 자바8부터 지원하며, 함수형 인터페이스(람다식 관련)를 지정하는 어노테이션이다.
    • 만약 메소드가 존재하지 않거나 2개 이상의 메소드(default 메소드 제외)가 존재할 경우 컴파일 오류를 발생시킨다.

 위의 어노테이션 말고도 메타 어노테이션이 있는데, 이를 이용하면 사용자 지정 어노테이션을 생성할 수 있다.

  1. @Retention
    • 자바 컴파일러가 어노테이션을 다루는 방법을 기술하며, 어느 시점까지 영향을 미치는지를 결정한다.
    • 종류는 다음과 같다.
      • RetentionPolict.SOURCE: 컴파일 전까지만 유효
      • RetentionPolicy.CLASS: 컴파일러가 클래스를 참조할 때 까지 유효
      • RetentionPolicy.RUNTIME: 컴파일 이후에도 JVM에 의해 계속 참조가 가능(리플렉션 사용)
  2. @Target
    • 어노테이션이 적용될 위치를 선택한다.
    • 종류는 다음과 같다.
      • ElementType.PACKAGE: 패키지선언
      • ElementType.TYPE: 타입선언
      • ElementType.ANNOTATION_TYPE: 어노테이션 타입 선언
      • ElementTpe.CONSTRUCTOR: 생성자 선언
      • ElementType.FIELD: 멤버 변수 선언
      • ElementType.LOCAL_VARIABLE: 지역 변수 선언
      • ElementType.METHOD: 메소드 선언
      • ElementType.PARAMETER: 전달인자 선언
      • ElementType.TYPE_PARAMETER: 전달인자 타입 선언
      • ElementType.TYPE_USE: 타입 선언
  3. @Documented
    • 해당 어노테이션을 Javadoc에 포함시킨다.
  4. @Inherited
    • 어노테이션의 상속을 가능하게 한다.
  5. @Repeatable
    • 자바8부터 지원하며, 연속적으로 어노테이션을 선언할 수 있게 해준다.

 예시(정수값 주입 어노테이션)

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface InsertIntData {
    int data() default 0;
}

이 어노테이션을 적용하면 다음과 같은 효과를 얻는다.

@InsertIntData(data = 30)

private int num; // num에 30이 주입됨

 

@InsertIntData

private int defaultNum; // defaultNum에 0이 주입됨

 

출처: https://elfinlas.github.io/2017/12/14/java-annotation/