728x90
프로그래밍 언어에 영향을 미치지 않고 유용한 정보를 제공하는 기능
표준 애너테이션
// 오버라이딩을 올바르게 했는지 컴파일러가 체크하게 함
@Override
// 앞으로 사용하지 않을 것을 권장하는 필드나 메서드를 정할 때
@Deprecated
// 함수형 인터페이스가 컴파일러가 올바르게 작성했는지 체크하게 함
// 함수형 인터페이스가 하나의 추상메소드만 가져야 하는 제약을 지킨지 확인
@FunctionalInterface
// 컴파일러의 경고메시지가 나타나지 않게 억제
// 이미 확인한 경고를 다시 확인하지 않기 위해
@SuppressWarinings(억제하고자 하는 경고의 종류를 문자열로 지정)
@SuppressWarinings({경고1,경고2,경고3})
메타 애너테이션
애너테이션을 만들 때 사용하는 애너테이션
// 애너테이션을 정의할 때, 애너테이션을 어느 곳에 적용할 수 있는지 지정할 때
@Target
// 애너테이션이 언제까지 유지되는지 기간을 정할 때 사용
@Retention
// javadoc으로 작성한 문서에 포함 시킬 때
@Documented
// 애너테이션을 자손 클래스에 상속하고자 할 때
@Inherited
// 반복해서 붙일 수 있는 애너테이션을 정의할 때 사용
@Repeatable
애너테이션 정의하기
// 애너테이션을 직접 생성할 수 있음
@interface 애너테이션명 {
타입 요소명();
추상 메소드 // 애니테이션의 메소드는 추상메소드임
}
// 적용할 때 값을 지정해서 사용
@interface 애너테이션명 {
타입 요소명 = 값;
추상 메소드
}
// 적용시 값을 지정하지 않으면 null을 제외한 기본값 지정 가능
// 요소가 하나만 존재하고 요소명이 value인 경우 요소명 생략가능
// 요소의 타입이 배열인 경우는 중괄호를 사용하고 값이 없을 때도 빈중괄호를 써야함
애너테이션의 조상
Annotation은 모든 애너테이션의 조상이지만 클래스가 아닌 인터페이스임
마커 애너테이션
요소가 하나도 정의되지 않은 애너테이션
애너테이션 요소의 규칙
- 요소의 타입은 상수, 기본형, String, enum, 애너테이션, Class만 허용
- 괄호 안에 매개변수 선언 불가능
- 예외 선언 불가능
- 요소를 <T>(타입 매개변수)로 정의할 수 없음