직역하자면 주석이라는 의미를 가진다.
자바 소스 코드사이에 @
기호를 붙여 사용하는데, Java 5에서 추가된 기능이다.
@Override
선언한 메서드가 오버라이딩 되었다는 것을 의미한다.
만약 부모 객체에서 해당 메서드를 찾을 수 없다면 컴파일 에러를 발생 시킨다.
@Deprecated
해당 메서드가 더 이상 사용되지 않음을 의미한다.
만약 사용할 경우 컴파일 경고를 발생시키며, 해당 메서드나 클래스는 IDE상에서 줄이 그어져있다.
@SuppressWarnings
선언한 곳의 컴파일 경고를 무시하도록 한다.
@SafeVarargs
Java 7에서 추가된, 제네릭 같은 가변인자의 매개변수를 사용할 때의 경고를 무시한다.
@FunctionalInterface
Java 8에서 추가된, 함수형 인터페이스를 지정하는 애노테이션이다.
만약 메서드가 존재하지 않거나, 1개 이상의 메서드가 존재할 경우 컴파일 오류를 발생시킨다.
@Retention
자바 컴파일러가 애노테이션을 다루는 방법을 기술하며, 특정 시점까지 영향을 미치는지 결정한다.
종류 | 설명 |
---|---|
RetentionPolicy.SOURCE | 컴파일 전까지만 유효 |
RetentionPolicy.CLASS | 컴파일러가 클래스를 참조할 때까지 유효 |
RetentionPolicy.RUNTIME | 컴파일 이후에 JVM에 의해 계속 참조 가능 |
( 리플렉션 사용 ) |
@Documented
해당 애노테이션을 JavaDoc에 포함시킨다.
@Target
애노테이션이 적용할 위치를 선택한다.
종류 | 설명 |
---|---|
ElementType.PACKAGE | 패키지 선언 |
ElementType.TYPE | 클래스, 인터페이스, 열거 타입 선언 |
ElementType.ANNOTATION_TYPE | 애노테이션 타입 선언 |
ElementType.CONSTRUCTOR | 생성자 선언 |
ElementType.FIELD | 멤버 변수 선언 |
ElementType.LOCAL_VARIABLE | 지역 변수 선언 |
ElementType.METHOD | 메서드 선언 |
ElementType.PARAMETER | 파라미터 선언 |
ElementType.TYPE_PARAMETER | 파라미터 타입 선언 |
ElementType.TYPE_USE | 타입 선언 |
@Inherited
애노테이션의 상속을 가능하게 한다.
@Repeatable
Java 8에서 추가된, 연속적으로 애노테이션을 선언할 수 있게 한다.
public class AnnotationTest {
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation {
String value() default "My Annotation : default value";
}
static class MyObject {
@MyAnnotation
public void testMethod1() {
System.out.println("MyObject.testMethod1");
}
@MyAnnotation(value = "My new Annotation")
public void testMethod2() {
System.out.println("MyObject.testMethod2");
}
}
@Test
void annoTest() {
MyObject obj = new MyObject();
obj.testMethod1();
obj.testMethod2();
Method[] methodList = MyObject.class.getMethods();
for(Method method : methodList) {
if(method.isAnnotationPresent(MyAnnotation.class)) {
MyAnnotation anno = method.getDeclaredAnnotation(MyAnnotation.class);
System.out.println("value = " + anno.value());
}
}
}
}
MyObject.testMethod1
MyObject.testMethod2
value = My Annotation : default value
value = My new Annotation