Annotation(어노테이션)

이규은·2021년 10월 20일
0

어노테이션

목록 보기
1/1

어노테이션은 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종이다.
@ 기호를 앞에 붙여서 사용한다.

java에서 기본으로 제공하는 어노테이션

  1. @Override
    선언한 메서드가 오버라이드 되었다는 것을 나타낸다.
    부모 클래스에서 해당 메서드를 찾을 수 없으면 컴파일 에러를 발생시킨다.
interface Animal {
    void cry();
}

class Dog implements Animal {
    @Override
    public void cry() {
        System.out.println("멍멍");
    }
}
  1. @Deprecated
    해당 메서드가 더 이상 사용되지 않음을 표시한다.
    사용할 경우 컴파일 경고를 발생시킨다.
class Dog implements Animal {
    @Deprecated
    public void cry() {
        System.out.println("멍멍");
    }
}
  1. @SuppressWarnings
    선언한 곳의 컴파일 경고를 무시한다.

  2. @SafeVarargs
    java7 부터 지원한다.
    제너릭 같은 가변인자의 매개변수를 사용할 때 경고를 무시한다.

  3. @FunctionalInterface
    java8 부터 지원한다.
    함수형 인터페이스를 지정하는 어노테이션이다.
    메서드가 존재 하지 않거나 1개 이상의 메서드가 존재할 경우(default 제외) 컴파일 오류를 발생시킨다.

메타 어노테이션

  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 부터 지원한다.
    연속적으로 어노테이션을 선언할 수 있게 해준다.

어노테이션 프로세서

자바 컴파일러의 컴파일 단계에서 유저가 정의한 어노테이션의 소스코드를 분석하고 처리하기 위해 사용되는 훅이다.
컴파일 에러나 경고를 만들어 내거나 소스코드와 바이트 코드를 내보내기도 한다.

어노테이션 프로세서 사용 예제

  1. Lombok
  2. AutoService : java.util.ServiceLoader 용 파일 생성 유틸리티
  3. @Override
  4. Dangger 2 : 컴파일 타임 DI 제공
profile
안녕하세요

0개의 댓글