Java @interface 고유한 어노테이션 정의
@interface, 메타 어노테이션, 어노테이션 속성
고유한 주석 정의 – @interface 명령어
@intarface name {
definiton
}
name: 어노테이션 이름
definition: 어노테이션 정의
@interface
명령어를 사용하여 어노테이션을 직접 정의할 수도 있다. 예를 들어, 다음은 Version
어노테이션을 정의하는 예제이다.
Version.java
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Inherited
public @interface Version {
double value();
}
메타 어노테이션
어노테이션 정의에서는 어노테이션 자체에 대한 정보를 정의하기 위한 어노테이션 부여할 수 있다. 그런 어노테이션을 메타 어노테이션(Meta annotation)이라고 한다.
메타 어노테이션의 종류는 아래와 같다.
@Retention
@Target
@Inherited
@Retention
어노테이션 정보가 유지되는 범위
어노테이션 | 개요 |
---|---|
@Retention(SOURCE) |
어노테이션이 소스 코드에만 이용 가능하며 컴파일 후에는 사라짐 |
@Retention(CLASS) |
어노테이션이 .class 파일에 존재하지만 런타임 시에는 사라짐 |
@Retention(RUMTIME) |
어노테이션이 컴파일러와 런타임에 사용 가능 |
@Target
어노테이션을 부여할 수 있는 대상을 지정한다.
어노테이션 | 개요 |
---|---|
@Target(ElementType.TYPE) |
클래스의 어떤 요소에나 적용 가능, 기본값 |
@Target(ElementType.FIELD) |
클래스의 특정 필드 |
@Target(ElementType.METHOD) |
클래스의 메서드 |
@Target(ElementType.PARAMETER) |
메서드의 파라미터 |
@Target(ElementType.CONSTRUCTOR) |
생성자 |
@Target(ElementType.LOCAL_VARIABLE) |
로컬 변수 |
@Target(ElementType.ANNOTATION_TYPE) |
어노테이션 타입 |
@Inherited
어노테이션 정보가 서브 클래스에도 상속가능 여부
어노테이션 속성
@interface
명령어 아래에는 어노테이션에서 사용할 수 있는 속성을 지정한다. 속성은 추상 메소드와 같이 형태와 이름 세트로 나타낸다.
이와 같이 정의된 속성은 일반적으로 @어노테이션명(속성명=값, ...)
의 형식으로 지정할 수 있다. 다만, 속성명이 value
일 때는 이름을 생략하여 @어노테이션명(값)
과 같이 작성할 수도 있다.
예를 들어, 다음은 Version
어노테이션을 지정하는 annotationTest
메소드의 예제이다.
AnnotationSample.java
package com.example.mynavi.object;
public class AnnotationSample {
@Version(1.0)
public void annotationTest() {
System.out.println("Released");
}
}
최종 수정 : 2023-01-07