티스토리 뷰

JAVA/JAVA기본

JAVA - 어노테이션이란?

realizers 2022. 1. 29. 15:52
728x90
반응형

어노테이션이란?


  • 어노테이션이란 주석이라는 뜻을 가지고 있습니다.
  • 주석이라는 뜻을 가지고 있지만 일반 주석과는 다르게 코드를 작성할 수 있습니다. 이 코드를 작성할 수 있다는 것은 무엇인가를 할 수 있다는 의미입니다.

 

어노테이션 정의하는 방법


@Target
  • @Target은 해당 어노테이션 사용 대상을 지정합니다. METHOD를 선언하게 되면 메서드에 사용할 수 있다고 지정된 것입니다.
@Retention
  • @Retention은 어노테이션 유지정보를 지정하는데 사용합니다. RUNTIME으로 지정하게 되면 실행 시에 해당 어노테이션을 참조하게 됩니다.
@interface
  • @interface은 어노테이션 타입을 선언하는 키워드입니다. 어노테이션 타입 선언을 일반적인 인터페이스 선언과 구분하기 위해 @를 붙입니다. 
number(), text()
  • number()의 리턴 타입은 int이며, text()의 리턴타입은 String입니다. 이렇게 메서드처럼 어노테이션 안에 선언해 놓으면 이 어노테이션을 사용할 때 항목에 대한 타입으로 값을 지정할 수 있습니다.
default
  • default를 사용하면 기본값을 지정할 수 있습니다.
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UserAnnotation {

    public int number();
    public String text() default "Hello World";
}

 

@Target 어노테이션


  • @Target 어노테이션은 어노테이션이 적용 가능한 대상을 지정하는데 사용합니다. 적용 가능한 대상을 여러개 지정하고 싶다면 {} 배열을 사용하면 됩니다.
CONSTRUCTOR
  • 생성자 선언시
FIELD
  • enum 상수를 포함한 필드값 선언시
LOCAL_VARIABLE
  • 지역 변수 선언시
METHOD
  • 메서드 선언시
PACKAGE
  • 패키지 선언시
PARAMETER
  • 파라미터 선언시
TYPE
  • 클래스, 인터페이스, enum등 선언시

 

 

@Retention 어노테이션


  • @Retention 어노테이션은 유지되는 기간을 지정하는데 사용됩니다. 즉 어느 시점까지 어노테이션의 메모리를 가져갈건지 설정합니다.
SOURCE
  • 어노테이션 정보가 컴파일 시 사라집니다.
CLASS
  • 클래스 파일에 있는 어노테이션 정보가 컴파일러에 의해서 참조가 가능합니다. 하지만 가상머신에서는 사라집니다.
RUNTIME
  • 실행 시 어노테이션 정보가 가상 머신에 의해 참조가 가능합니다.

 

@Documented 어노테이션


  • 어노테이션 정보가 javadoc으로 작성된 문서에 포함되도록 하는 메타 어노테이션입니다.
  • 자바에서 제공하는 기본 어노테이션 중에 '@Override'와 '@SuppressWarnings'을 제외하고는 모두 @Documented 메타 어노테이션이 붙어 있습니다.

 

@Inherited 어노테이션


  • @Inherited 어노테이션은 자손 클래스에 상속되도록 합니다. 해당 어노테이션이 붙은 어노테이션을 조상 클래스에 선언하면 자손 클래스도 이 어노테이션이 붙은 것과 같이 인식됩니다.
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface UserAnnotation {

    public int age() default 30;
    public String name() default "홍길동";
}

@UserAnnotation
public class Parent {

    private int age;
    private String name;
}

public class Child extends Parent{ }

public class Example {
    public static void main(String[] args) {
        UserAnnotation annotation = Child.class.getAnnotation(UserAnnotation.class);

        System.out.println(annotation);
        // @com.annotationExample.UserAnnotation(name="홍길동", age=30)
    }
}

 

어노테이션 프로세서


어노테이션 프로세서란?
  • 자바 컴파일러의 컴파일 단계에서 유저가 정의한 어노테이션 소스코드를 분석하고 처리하기 위해 사용되는 훅입니다. 컴파일 에러나 컴파일 경고를 만들어 내거나 소스코드(.java)와 바이트코드(.class)를 내보내기도 합니다.
어노테이션 프로세서 사용 예제
  • Lombok
  • AutoService
  • @Override
어노테이션 프로세서의 장점
  • 런타임 비용이 없습니다.(컴파일 타임에 조작이 완료된 상태이기 때문입니다.)

 

728x90
반응형