본문 바로가기

IT/JAVA

자바 애노테이션 - 백기선님 스터디 12주차 과제

목표

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

학습할 것 (필수)


애노테이션이란

미리 정의된 태그들을 이용해서 주석 안에 정보를 저장하고, jacadoc.exe라는 프로그램이 이 정보를 읽어 문서를 작성한다.

이를 응용하여 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것이다.

주석처럼 프로그래밍 언어에 영향을 미치지 않으면서도 유용한 정보를 제공한다.

 

애노테이션 정의하는 방법

@기호를 붙이며 이외에는 인터페이스를 정의하는 것과 같다.

@interface 애노테이션이름 {
	타입 요소이름();	// 애노테이션 요소 선언
    ...
}

 

애노테이션의 요소

  • 애노테이션 내의 선언된 메소드
  • 반환 값이 있고 매개변수는 없는 추상 메서드의 형태
  • 상속을 통해 구현하지 않아도 된다.
  • 애노테이션 적용 시 요소들의 값을 빠짐없이 지정해주어야 한다.
  • 요소의 이름도 적으므로 순서는 상관없다.

 

@interface TestInfo {
    int count();
    String testedBy();
    String[] testTools();
    TestType testType();	// enum TestTpye { FIRST, FINAL }
    DateTime testDate();	// 자신이 아닌 다른 애너테이션을 포함할 수 있다.
}

@interface DateTime {
    String yymmdd();
    String hhmmss();
}
@TestInfo(count = 3, testedBy = "SuJin",
	testTools = {"JUnit", "AutoTester"},
    testType = TestType.FIRST,
    testDate = @DateTime(yymmdd = "210424", hhmmss="114312")
public class NewClass { . . . }

 

애노테이션의 각 요소는 기본값을 가질 수 있으며, 기본값이 있는 요소는 애노테이션을 적용할 때 값을 지정하지 않으면 기본값이 사용된다.

@interface TestInfo {
	int count() default 1;
}

@TestInfo	// @TestInfo(count = 1)과 동일
public class NewClass { . . . }

애노테이션 요소가 하나뿐이고 이름이 value인 경우, 요소의 이름을 생략하고 값만 적어서 정의할 수 있다.

@interface TestInfo {
	String value();
}

@TestInfo("passed")
class NewClass { . . . }

 

 

@retention

애노테이션이 유지되는 기간을 지정하는 데 사용된다.

유지 정책 의미
SOURCE 소스 파일에만 존재. 클래스파일에는 존재하지 않음.
CLASS 클래스 파일에 존재. 실행 시에 사용 불가. 기본값
RUNTIME 클래스 파일에 존재. 실행 시에 사용 가능.

 

@target

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

// @SuppressWarnings에 적용할 수 있는 대상을 @Target으로 지정함.

@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
public @interface SuppressWarnings {
	String[] value();
}

 

대상 타입 의미
ANNOTATION_TYPE 애노테이션
CONSTRUCTOR 생성자
FIELD 필드
LOCAL_VARIABLE 지역변수
METHOD 메서드
PACKAGE 패키지
PARAMETER 매개변수
TYPE 타입(클래스, 인터페이서, enum)
TYPE_PARAMETER 타입 매개변수(JDK1.8)
TYPE_USE 타입이 사용되는 모든 곳(JDK1.8)
    @Target으로 지정할 수 있는 애노테이션 적용 대상의 종류

@documented

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

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

 

애노테이션 프로세서

  • annotation processor는 자바 컴파일러 플러그인의 일종이다.
  • 어노테이션을 사용하기 위해서는 어노테이션 프로세서가 필요하다.

 

동작 구조

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

 

 

Reference)

자바의 정석 - 남궁 성

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

 

annotation processor 란

annotation processor는 자바 컴파일러 플러그인의 일종으로, 어노테이션에 대한 코드베이스를 검사, 수정, 생성하는 역할이다. 어노테이션을 사용하기 위해서는 어노테이션 프로세서가 필요하다. 동

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