어노테이션

kwang·2022년 7월 7일
0

Java-Live-Study

목록 보기
13/15

목표

자바의 애노테이션에 대해 학습하세요.

학습할 것 (필수)

  • 애노테이션 정의하는 방법
  • @retention
  • @target
  • @documented
  • 애노테이션 프로세서

애노테이션 정의하는 방법

메타 데이터

메타 데이터는 어떠한 데이터에 대한 설명을 해주는 데이터이다.

어노테이션

  • 어노테이션은 사전적으로 주석이라는 뜻이며 메타 데이터의 한 형태이다.
  • 일반 주석과의 차이는 코드로써 기능이 있다는 점이다.
  • 데이터에 대한 유효성 검사 조건을 보다 쉽게 파악할 수 있고 코드가 간결해진다.

용도

  • 컴파일러에게 코드 에러를 체크하도록 정보를 제공한다.
  • 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성하도록 정보를 제공한다.
  • 런타임 시 특정 기능을 실행하도록 정보를 제공한다.

종류

Built-in Annotation
자바에서 기본적으로 제공하는 어노테이션

종류설명
@Override선언한 메서드가 오버라이드 되었다는 것을 나타냄. 상위(부모)클래스(또는 인터페이스)에서 해당 메서드를 찾지 못하면 컴파일 에러 발생.
@Deprecated해당 메서드가 더이상 사용되지 않음을 표시합니다.해당 메서드를 사용할 경우 컴파일 경고를 발생.
@SuppressWarnings선언한 곳의 컴파일 경고를 무시.
@SafeVarargs제네릭 혹은 가변인자 매개변수를 사용할 때의 경고를 무시한다.(Java 7 이상)
@FunctionalInterface람다 함수등을 위한 인터페이스 지정.(Java 8 이상)메소드가 없거나 두개이상 되면 컴파일 오류 발생

Meta Annotation
커스텀 어노테이션을 만들수 있게 제공해주는 어노테이션

종류설명
@Retention어노테이션이 유지되는 기간을 지정하는데 사용한다.(세가지 유지정책 사용)
@Documented해당 어노테이션을 javadoc에 포함시킵니다.
@Target어노테이션이 적용할 위치를 지정합니다. 여러 값일 경우 {} 사용
@Inherited어노테이션의 상속을 가능하게 합니다.
@Repeatable연속적으로 어노테이션을 사용할 수 있게 해줍니다.

정의하는 법

    @interface AnnotationSample{
        
    }

@interface 키워드를 사용하여 어노테이션 타입이라고 선언할 수 있다.

필드

어노테이션은 멤버변수 즉 필드를 가질 수 있다.

  • 요소의 타입은 기본형, 배열, String, Enum, Annotation, Class를 가질 수 있다.
  • ()안에 매개변수를 선언할 수 없다.
  • 예외를 선언할 수 없다.
  • 요소를 타입 매개변수로 정의할 수 없다.
  • default 값을 지정할 수 있다.
    @interface AnnotationSample{
        int num() default 10;
        String str();
        char[] arr();
    }

@retention

Meta Annotation의 하나로 어노테이션의 유지기간을 설정하는 어노테이션이다.
아래와 같은 정책을 이용하여 기간을 지정할 수 있다.

종류설명
RetentionPolicy.Source컴파일 전까지만 유효
RetentionPolicy.CLASS컴파일러가 클래스를 참조할 때까지 유효
RetentionPolicy.RUNTIME컴파일 이후에도 JVM에 의해 계속 참조 가능

아래와 같이 선언할 수 있다.

    @Retention(RetentionPolicy.RUNTIME)
    @interface AnnotationSample{ 
    
    }

@target

@target 어노테이션은 해당 어노테이션이 적용될 위치를 지정하는 어노테이션이다.

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

아래와 같이 사용할 수 있다.

    @Target(ElementType.PACKAGE)
    @interface AnnotationSample{

    }

@documented

해당 어노테이션은 javadoc파이엘 추가시켜주는 어노테이션이다.

javaoc만들기를 이용하면 해당 어노테이션이 달린 어노테이션만 포함되어 있는걸 확인할 수 있다.

애노테이션 프로세서

annotation processor는 자바 컴파일러 플러그인의 일종으로, 애노테이션에 대한 코드베이스를 검사, 수정, 생성하는 역할이다.

애노테이션을 사용하기 위해서는 애노테이션 프로세서가 필요하다.

  • 애노테이션 프로세서를 사용한다는 것을 자바 컴파일러가 알고 있는 상태에서 컴파일을 수행한다.
  • 애노테이션 프로세서들이 각자의 역할에 맞게 구현되어 있는 상태에서 실행되지 않은 애노테이션 프로세서를 실행한다.
  • 애노테이션 프로세서 내부에서 애노테이션에 대한 처리를 한다.
  • 자바 컴파일러가 모든 애노테이션 프로세서가 실행 되었는지 검사하고, 모든 애노테이션 프로세서가 실행되지 않았다면 반복한다.

0개의 댓글