0%

JavaAnnotation

Java Annotation

Annotation이란?

어노테이션은 JEE5(Java Platform, Enterprise Edition 5)부터 새롭게 추가된 요소입니다.

참고: 블로그 블로그2

어노테이션으로 인해 데이터의 유효성 검사 등을 쉽게 알 수 있고, 이와 관련한 코드가 깔끔해지게 됩니다. 용도는 다양한 목적이 있지만 메타 데이터(데이터를 위한 데이터를 의미함 / 데이터에 대한 설명을 의미하는 데이터)의 비중이 가장 크다고 할 수 있습니다.

1
@Example
2
// @ <- 기본적으로 컴파일러에게 어노테이션임을 알려줌
3
// 뒤에 오는 example는 어노테이션의 이름

Annotation 선언위치

어노테이션은 클래스, 인터페이스, 메소드, 메소드 파라미터, 필드, 지역변수 위에 위치할 수 있습니다.

1
@Example
2
public class Test{}

Java에서 기본적으로 제공하는 어노테이션의 종류

  • @Override
    • 선언한 메서드가 오버라이드 되었다는 뜻입니다.
    • 만약 상위 클래스에서 해당 메서드를 찾을 수 없다면 컴파일 에러를 발생시킵니다.
  • @Depercated
    • 해당 메서드가 더 이상 사용되지 않음을 표시합니다.
    • 만약 사용할 경우 컴파일 경고를 발생 시킵니다.
  • @SupperssWarnings
    • 선언한 곳의 컴파일 경고를 무시하도록 합니다.
  • @Functionallnterface
    • Java8부터 지원되며, 함수형 인터페이스를 지정하는 어노테이션입니다.
    • 만약 메서드가 존재하지 않거나, 1개 이상의 메서드가 존재할 경우 컴파일 오류를 발생 시킵니다.

메타 Annotation

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

1, 2번은 어노테이션 선언에 쓰인 어노테이션은 메타 어노테이션이라 하며 이를 이용해 커스텀 어노테이션을 작성할 수 있게 됩니다. 메타 어노테이션의 종류에 대해 정리해보겠습니다.

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

  • Retention

    • 자바 컴파일러가 어노테이션을 다루는 방법을 기술하며, 특정 시점까지 영향을 미치는지를 결정하니다.
    • 종류
      • RetentionPolicy.SOURCE: 컴파일전까지만 유효(컴파일 이후에는 사라짐)
      • RetentionPolicy.CLASS: 컴파일러가 클래스를 참조할 때까지 유효
      • RetentionPolicy.RUNTIME: 컴파일 이후에도 JVM에 의해 계속 참조가 가능
  • @Documented

    • 해당 어노테이션을 Javadoc에 포함 시킵니다.
  • @Inherited

    • 어노테이션의 상속을 가능하게 합니다.
  • @Repeatable

    • java8부터 지원하며, 연속적으로 어노테이션을 선언할 수 있게 해줍니다.
  • @Target

    • 어노테이션이 적용할 위치를 선택합니다.

    • 종류

      • ElementType.PACKAGE: 패키지 선언
      • ElementType.TYPE: 타입 선언
      • ElementType.ANNOTATION_TYPE: 어노테이션 타입 선언
      • ElementType.CONSTRUCTOR: 생성자 선언
      • ElementType.FIELD: 멤버 변수 선언
      • ElementType.LOCAL_VARIABLE: 지역 변수 선언
      • ElementType.METHOD: 메서드 선언
      • ElementType.PARAMETER: 전달인자 선언
      • ElementType.TYPE_PARAMETER: 전달인자 타입 선언