사전적 의미로는 주석이라고 한다.
Java Annotation은 자바 소스 코드에 추가하여 사용할 수 있는 메타 데이터의 일종이다. 메타 데이터란 애플리케이션이 처리해야할 데이터가 아니라 컴파일 과정과 실행 과정에서 코드를 어떻게 처리해야하는지 알려 주기 위한 추가 정보이다.
보통 @ 기호를 앞에 붙여서 사용한다.
자바에서 기본적으로 제공하는 애노테이션
컴파일러에게 오버라이딩하는 메서드라는 것을 알린다. 생략 가능하다. 상속 받은 부모 클래스 또는 구현해야할 인터페이스에서 해당 메서드가 없다면 컴파일 오류가 발생한다. 이러한 실수를 방지할 수 있다.
class Parent{
void parentMethod(){}
}
class Child extends Parent{
@Override
void parentmethod(){} // 컴파일 에러 (오타)
}
앞으로 사용하지 않을 것을 권장하는 필드나 메서드에 붙인다. 하위 호환을 위해 메서드를 삭제하지 않고 컴파일 경고를 출력한다.
컴파일러의 경고 메시지가 나타나지 않게 한다.
제네릭 같은 가변인자 매개변수를 사용할 때 경고를 무시한다.
컴파일러에게 함수형 인터페이스라는 것을 알린다.
애노테이션을 위한 애노테이션이다.
애노테이션을 만들 때 사용하는 애노테이션이다.
애노테이션을 정의할 때 적용 대상을 지정하는데 사용한다.
// 여러개 지정
@Target( {TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE} )
or
// 한 개만 지정
@Target(ElementType.ANNOTATION_TYPE)
애노테이션이 유지되는 기간을 지정하는데 사용한다.
// 소스 파일에만 존재, 컴파일 시에만 사용, 클래스 파일에는 없음
@Retention(RetentionPolicy.SOURCE)
// 클래스 파일에 존재, 실행 시 사용 불가, 기본 값
@Retention(RetentionPolicy.CLASS)
// 클래스 파일에 존재, 실행시 사용 가능
@Retention(RetentionPolicy.RUNTIME)
javadoc으로 작성한 문서에 포함시킨다. javadoc을 통해 자동으로 html 문서가 만들어진다.
JavaDoc: 자바 코드에서 API 문서를 HTML 형식으로 생성해주는 도구
애노테이션을 자손 클래스에 상속할 때 사용한다.
반복해서 붙일 수 있는 애노테이션을 정의할 때 사용한다.
annotation을 직접 만들어 사용할 수 있다.
@interface 어노테이션이름{
타입 요소이름();
}