본문 바로가기
Java

에노테이션

by k0o9 2022. 5. 27.

애노테이션

자바개발자들은 소스코드와 문서를 하나의 파일로 관리하는 것이 더 낫다고 생각했다.

그래서 소스코드의 주석에 소스코드에 대한 정보를 저장하고, 소스코드의 주석으로부터 HTML문서를 생성해내는 프로그램인 javadoc.exe를 만들어서 사용한다.

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

표준 에노테이션

자바에서 기본적으로 제공하는 에터네이션.

에노테이션 설명
@Override 컴파일러에게 오버라이딩 하는 메서드라는 것을 알린다.
@Deprecated 앞으로 사용하지 않을 것을 권장하는 대상에게 붙인다.
@SuppressWarnings 컴파일러의 특정 경고메시지가 나타나지 않게 해준다.
@SafeVarargs 지네릭스 타입의 가변인자에 사용한다.
@FunctionallInterface 함수형 인터페이스라는 것을 알린다.
@Native native 메서드에서 참조되는 상수 앞에 붙인다.

메타 에노테이션

에노테이션을 정의하는데 사용되는 에노테이션의 에노테이션

에노테이션 설명
@Target 에노테이션이 적용가능한 대상을 지정하는데 사용한다.
@Documented 에노테이션 정보가 javadoc로 작성된 문서에 포함되게 한다.
@Inherited 에노테이션이 자손 클래스에 상속되도록 한다.
@Retention 에노테이션이 유지되는 범위를 지정하는데 사용한다.
@Repeartable 에노테이션을 반복해서 적용할 수 있게한다.

애노테이션 타입 정의하기

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

에노테이션 요소

  • 에노테이션 내에 선언된 메서드를 ‘에노테이션의 요소’라 칭한다.
  • 에노테이션의 요소는 반환값이 있고 매개변수는 없는 추상메서드의 형태를 가진다.
  • 애노테이션을 적용할 때 이 요소들의 값을 빠짐없이 지정해 주어야 한다.
  • 에노테이션의 요소에는 기본값을 적용할 수 있으며 기본값이 있을 경우 값을 지정해주지 않아도 된다.
  • 에노테이션의 요소가 오직 1개일 경우에는 요소의 이름을 생랴가고 값만 적어도 된다.
  • 요소의 타입이 배열인 경우 {}를 사용해서 여러 개의 값을 지정할 수 있다.

@Target

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

  • Target 에노테이션 적용대상 종류
대상 타입 의미
ANNOTATION_TYPE 애노테이션
CONSTRUCTOR 생성자
FIELD 필드
LOCAL_VARIABLE 지역변수
METHOD 메서드
PACKAGE 패키지
PARAMETER 매개변수
TYPE 타입(클래스, 인터페이스, enum)
TYPE_PARAMETER 타입 매개변수
TYPE_USE 타입이 사용되는 모든 곳
@Target({TYPE, FIELD, METHOD})
public @interface Exam {
    String value;
}
//TYPE, FIELD, METHOD에 사용할 수 있는 애노테이션 Exam

@Retention

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

  • 애노테이션 유지정책의 종류
유지 정책 의미
SORUCE 소스 파일에만 존재. 클래스파일에는 존재하지 않음
CLASS 클래스 파일에 존재. 실행시에 사용불가. 기본값
RUNTIME 클래스 파일에 존재. 실행시에 사용가능.

@Documented

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

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

에노테이션 프로세스

이런 애노테이션도 애노테이션 프로세서가 없다면 그냥 주석에 불가하다.

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

  • 동작 구조
    1. 애노테이션 클래스를 생성한다.
    2. 에노테이션 파서 클래스를 생성한다
    3. 애노테이션을 사용한다
    4. 컴파일시, 애노테이션 파서 클래스가 애노테이션을 처리한다.
    5. 자동생성된 클래스가 빌드 폴더에 추가된다.

'Java' 카테고리의 다른 글

면접준비 - 자바  (0) 2022.10.17
입출력  (0) 2022.05.27
Enum  (0) 2022.05.27
Thread  (0) 2022.05.27
예외처리  (0) 2022.05.27