본문 바로가기
Challenge

12주차 과제: 애노테이션 #12

by Daisy :) 2021. 2. 12.
반응형

애노테이션이란?

애너테이션의 뜻은 Useable한 주석입니다. 

우리가 알고 있는 주석은 프로그램에 영향을 못미치지만, 애너테이션은 주석이지만 프로그래밍에 영향을 미치게 됩니다. 

주석이기도 하지만 사용가능한 코드가 되기도 합니다. 

 

소스코드의 주석'/** ~*/'에 소스코드에 대한 정보를 저장하고, 소스코드의 주석으로부터 HTML문서를 생성해내는 프로그램(javadoc.exe)을 만들어서 사용했습니다. 

 

'/**'로 시작하는 주석안에 소스코드에 대한 설명들이 있고 그 안에 '@'이 붙은 태그들이 있는데, 미리 정의된 태그들을 이용해서 주석안에 정보를 저장하고 javadoc.exe라는 프로그램이 이 정보를 읽어서 문서를 작성하는데 사용합니다. 

 

애노테이션 정의하는 방법

@interface 애너테이션이름 {
	타입 요소이름(); // 애너테이션의 요소를 선언합니다. 
}

'@'기호를 붙이는 것을 제외하면 인터페이스를 정의하는 것과 동일합니다. 

 

애너테이션 요소의 규칙 

- 요소의 타입은 기본형, String , enum. 애너테이션, Class만 허용됩니다 

- () 안에 매개변수를 선언할 수 없습니다. 

- 예외를 선언할 수 없습니다. 

- 요소를 타입 매새변수로 정의할 수 없습니다. 

 

@retention

메타 에너테이션으로 애너테이션이 유지되는 범위를 지정하는데 사용합니다. 

 

* 메타에너테이션이란 '애너테이션을 위한 애너테이션', 즉 에너테이션에 붙이는 에너테이션으로 애너테이션을 정의할 떄 애너테이션의 적용대상이나 유지기간등을 지정하는데 사용합니다. 

 

Retention.class

 

@target

애너테이션이 적용 가능한 대상을 지정하는데 사용됩니다.

여러개의 값을 지정할 때는 배열에서처럼 괄호{}를 사용해야 합니다.

 

@Target({TYPE_PARAMETER, FIELD})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
	String[] value();
}

 

@Target 으로 지정할 수 잇는 애너테이션 적용대상의 종류

대상타입 의미
ANNOTATION_TYPE 애너테이션
CONSTRUCTOR 생성자
FIELD 필드(멤버변수, enum상수)
LOCAL_VARIABLE 지역변수
METHOD 메서드
PACKAGE 패키지
PARAMETER 매개변수
TYPE 타입(클래스, 인터페이스, enum)
TYPE_PARAMETER 타입 매개변수
TYPE_USE 타입이 사용되는 모든 곳

Target.class

 

@documented

애너테이션에 대한 정보가 javadoc으로 작성한 문서에 포함되도록 합니다.

자바에서 제공하는 기본 애너테이션 중에 '@Override'와 @SuppressWarnings'를 제외하고는 모두 이 메타 에너테이션이 붙어있습니다. 

위에 첨부한 이미지 Target.class와 retention.class 파일에도 이 애너테이션이 붙어있습니다. 

 

 

애노테이션 프로세서

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

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

 

동작 구조.

1. 애노테이션 프로세서를 사용한다는 것을 자바 컴파일러가 알고 있는 상태에서 컴파일을 수행한다.

2. 애노테이션 프로세서들이 각자의 역할에 맞게 구현되어 있는 상태에서 실행되지 않은 애노테이션 프로세서를 실행한다.

3. 애노테이션 프로세서 내부에서 애노테이션에 대한 처리를 한다.

4. 자바 컴파일러가 모든 애노테이션 프로세서가 실행 되었는지 검사하고, 모든 애노테이션 프로세서가 실행되지 않았다면 반복한다.

 

getter와 setter를 만드는데 편리한 롬복 또한 컴파일 시점에 애노테이션 프로세서를 사용하여 소스코드의 AST(abstract syntax tree)를 조작합니다. 

 

 

 

 

 

 

<reference>

자바의 정석 저자 남궁 성

im-recording-of-sw-studies.tistory.com/37

반응형

'Challenge' 카테고리의 다른 글

#210718 java 변수  (0) 2021.07.18
210315 #1:)  (0) 2021.03.26
11주차 과제: Enum  (0) 2021.01.29
10주차 과제: 멀티쓰레드 프로그래밍  (0) 2021.01.23
9주차 과제: 예외 처리  (0) 2021.01.15

댓글