주석처럼 프로그래밍 언어에 영향을 미치지 않으며 유용한 정보를 제공
프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것.
@Override
: 컴파일러에게 오버라이딩 메서드라는 것을 알림
오버라이딩을 올바르게 했는지 체크 할 수 있음
@Deprecated
: 앞으로 사용하지 않을 것을 권장하는 필드나 메서드임을 알림
@SuppressWarnings
: 컴파일러의 경고메세지가 안 나타나게 함
@SafeVarargs
@FunctionalInterface
: 함수형 인터페이스를 컴파일러가 체크함
@Native
애너테이션을 정의할 때 사용되는 애너테이션
@Target
: 애너테이션의 적용 대상을 지정할 때 사용
@Retention
: 애너테이션이 유지되는 기간을 지정하는데 사용
@Target({TYPE, FIELD, METHOD, PARAMETER, ...})
@Rententaion(RetentionPolicy.SOURCE) //유지정책 = 소스 파일에서만
public @interface SuppressWarnings{
// ...
}
@Rententaion(RetentionPolicy.RUNTIME)
: 클래스 파일에 존재, 실행시 사용가능
@Documented
@Inherited
: 애너테이션을 자손 클래스에 상속할 때 사용
@interface AnnotationName{
// ... elements
}
@interface TestInfo{
int count();
String testedBy();
}
@TestInfo(
count = 3,
testedBy = "Royce"
)
public class NewClass{...}
@interface TestInfo{
int count() default 1;
String testedBy();
}
@TestInfo(
testedBy = "Royce"
)
// count 1
// testedBy Royce
요소가 하나이고 이름이 value
이면 요소 이름 생략가능
@interface TestInfo{
int value();
}
@TestInfo(10)
// count 10
요소는 기본형, String, enum, 애너테이션, Class만 가능
예외선언 불가
매개변수 선언 불가
타입 매개변수(< T >) 사용 불가