자바에서 기본적으로 제공하는 어노테이션
@Override
class Super {
void run() {}
}
class Sub extends Super {
@Override
void rnu() {} // 컴파일 에러 발생, 오타가 난 것을 발견할 수 있음.
}
@Deprecated
class OldClass {
@Deprecated
int oldField;
@Deprecated
int getOldField() { return oldField; };
}
---------------------
◎ 메세지
Note: 파일명.java uses or overrides a deprecated API.
Note: Recomplie with -Xlint:deprecation for details.
@SuppressWarnings
@FunctionalInterface
@FunctionalInterface
public interface Runnable {
public abstract void run ();
}
사용자가 직접 어노테이션을 정의해서 사용할 수 있음.
정의 방법 : 인터페이스를 정의하는 것과 유사
어노테이션 규칙
@interface 애너테이션명 { // 인터페이스 앞에 @기호만 붙이면 애너테이션을 정의할 수 있습니다.
타입 요소명(); // 애너테이션 요소를 선언
}
import java.lang.annotation.*;
@Target(ElementType.FIELD)//애너테이션이 적용 가능한 대상을 FIELD로 정해줍니다.
@Retention(RetentionPolicy.RUNTIME)//코드 실행시 까지 애너테이션이 유지되게 정해줍니다.
@Documented //애너테이션 정보를 javadoc으로 작성된 문서에 포함시킨다.
public @interface BackendFramework { //백엔드 프레임워크를 지정해주는 애너테이션을 작성합니다.
enum Frameworks {SPRING, DJANGO, EXPRESS}
Frameworks backendFramework() default Frameworks.DJANGO;
}
어노테이션에 붙이는 애너테이션으로, 애너테이션의 적용 대상이나 유지 기간을 정하는 등 애너테이션의 정의하는 데에 사용
@Target
@Documented
@Documented
@Target(ElementType.Type)
public @interface CustomAnnotation { }
@Inherited
@Inherited // @SuperAnnotation이 하위 클래까지 영향 미치게 함
@interface SuperAnnotation{ }
@SuperAnnotation
class Super { }
class Sub extends Super{ } // Sub에 애너테이션이 붙은 것으로 인식
@Retention
유지 정책 | 설명 |
---|---|
SOURCE | .java 소스 파일까지는 애노테이션이 존재, 컴파일 되어 클래스 파일이 되면 사라짐 |
CLASS | .class 파일까지는 애노테이션이 존재, 런타임에서 사라짐 |
RUNTIME | 런타임 실행시까지 애노테이션이 남아있음 |
@Repeatable
@Repeatable(ToDos.class) // ToDo 애너테이션을 여러 번 반복해서 쓸 수 있게 한다.
@interface ToDo{
String value();
}
@ToDo("update test codes.")
@ToDo("override test methods")
class Main{
}