- 개념
- 주석처럼 프로그래밍 언어에 영향을 미치지 않으며, 유용한 정보를 제공 (프로그램의 설정 정보를 담고 있음.)
- Returns true if the specified object represents an annotation that is logically equivalent to this one.
- 표준 애너테이션
- 일반 애너테이션
@Override
: 오버라이딩을 올바르게 했는지 컴파일러가 체크한다.
@deprecated
: 앞으로 사용하지 않을 것을 권장하는 필드나 매서드에 붙인다.
- 메타 애너테이션
- 개념: 애너테이션 생성을 위한 애너테이션
@Target
: 애너테이션이 적용 가능한 대상을 지정하는데 사용한다.
@Documented
: 애너테이션 정보가 javadoc으로 작성된 문서에 포함되게 한다.
@Inherited
: 애너테이션이 자손 클래스에 상속되도록 한다.
@Retention
: 애너테이션이 유지되는 스코프를 지정하는데 사용한다.
- Source: 소스 파일에만 존재. 클래스파일에는 존재하지 않음
- Class 클래스 파일에 존재. 실행 시에 사용 불가. 기본값.
⇒ 클래스로더가 클래스들을 메모리에 올릴때 까지 존재한다.
- Runtime 클래스 파일에 존해. 컴파일 시에도 사용 가능.
@Repeatable
: 애너테이션을 반복해서 적용할 수 있게 한다.
@Repeatable인 @ToDo
를 하나로 묶을 컨테이너 애너테이션도 필요하다.
- 만드는 법:
@intergace
애너테이션 이름.
- 애너테이션의 매서드는 추상 매서드이며, 애너테이션을 적용할 때 지정.
- 적용시 값을 지정하지 않으면, 사용될 수 잇는 기본값 지정 가능 (null 제외)
- 요소의 타입이 배열인 경우 괄호{} 사용.
- 애너테이션 요소의 규칙
- 요소의 타입은 기본형, String, enum, 애너테이션, class만 허용
- 괄호 안에 매개변수를 선언할 수 없다.
- 예외를 선언할 수 없다.
- 요소를 타입 매개변수로 정의할 수 없다. (와일드 카드 X)