[JAVA] Annotation이란?

Annotation이란?

자바 개발을 하다 보면 클래스 또는 메서드 또는 변수 앞에 @Override 같은 @ 표시가 있다. 이 어노테이션은 JEE5(Java Platform, Enterprise Edition 5)부터 새롭게 추가된 요소이다.

이 어노테이션으로 인해 데이터의 유효성 검사 등을 쉽게 알 수 있고, 이와 관련한 코드가 깔끔해지게 된다. 일단 어노테이션의 용도는 다양한 목적이 있지만 메타 데이터의 비중이 가장 크다 할 수 있습니다.

메타-테이터(Meta-Data) : 데이터를 위한 데이터를 의미하며, 풀어 이야기하면 한 데이터에 대한 설명을 의미하는 데이터. (자신의 정보를 담고 있는 데이터)




Java에서 기본적으로 제공하는 Annotation 종류

1. @Override

  • 선언한 메서드가 오버라이드 되었다는 것을 나타냅니다.
  • 만약 상위(부모) 클래스(또는 인터페이스)에서 해당 메서드를 찾을 수 없다면 컴파일 에러를 발생 시킵니다.

2. @Deprecated

  • 해당 메서드가 더 이상 사용되지 않음을 표시합니다.
  • 만약 사용할 경우 컴파일 경고를 발생 키십니다.

3. @SuppressWarnings

  • 선언한 곳의 컴파일 경고를 무시하도록 합니다.

4. @SafeVarargs

  • Java7 부터 지원하며, 제너릭 같은 가변인자의 매개변수를 사용할 때의 경고를 무시합니다.

5. @FunctionalInterface

  • Java8 부터 지원하며, 함수형 인터페이스를 지정하는 어노테이션입니다.
  • 만약 메서드가 존재하지 않거나, 1개 이상의 메서드(default 메서드 제외)가 존재할 경우 컴파일 오류를 발생 시킵니다.




Annotation의 구조

먼저 어노테이션의 구조를 보기 위해서 아래의 코드를 참고한다. (예를 위해 작성된 Custom Annotation)

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomAnnotation {
	boolean isCheck() default true;
}

먼저 1번, 2번의 어노테이션 선언에 쓰인 어노테이션은 메타 어노테이션(Meta Annotation)이라 하며 이를 이용해 커스텀 어노테이션을 작성할 수 있게 된다.




Meta Annotation의 종류

1. @Retention

  • 자바 컴파일러가 어노테이션을 다루는 방법을 기술하며, 특정 시점까지 영향을 미치는지를 결정한다.
  • 종류는 다음과 같다.
    • RetentionPolicy.SOURCE : 컴파일 전까지만 유효. (컴파일 이후에는 사라짐)
    • RetentionPolicy.CLASS : 컴파일러가 클래스를 참조할 때까지 유효.
    • RetentionPolicy.RUNTIME : 컴파일 이후에도 JVM에 의해 계속 참조가 가능. (리플렉션 사용) 2. @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 : 타입 선언 3. @Documented
  • 해당 어노테이션을 Javadoc에 포함시킨다. 4. @Inherited
  • 어노테이션의 상속을 가능하게 한다. 5. @Repeatable
  • Java8 부터 지원하며, 연속적으로 어노테이션을 선언할 수 있게 한다.



어노테이션은 기본적으로 인터페이스 형태를 취하고 있으며, 단지 interface 앞에 @ 표시를 한다.

어노테이션의 필드에서는 enum, String이나 기본 자료형, 기본 자료형의 배열을 사용할 수 있다.

태그:

카테고리:

업데이트:

댓글남기기