Chapter 12. Annotation
- 어노테이션은 주석처럼 프로그램에 영향을 주지 않으면서 다른 프로그램이나 플러그인에게 유용한 정보를 제공한다.
- Ex @Test 어노테이션은 테스트 프로그램에게 이 메소드는 테스트가 필요하다는 것을 알린다.
- 즉, 테스트 프로그램에게 알리는 용도일 뿐 프로그램 자체에는 아무런 영향을 미치지 않는다.
표준 어노테이션
@Override
컴파일러에게 오버라이딩하는 메서드라는 것을 알린다.
@Deprecated
앞으로 사용하지 않을 것을 권장하는 대상에 붙인다.
@SuppressWarning
컴파일러의 특정 경고 메시지가 나타나지 않게 해준다.
@SafeVarargs
지네릭스 타입의 가변인자에 사용한다 (JDK1.7)
@Functionallnterface
함수영 인터페이스 라는 것을 알린다. (JDK1.8)
@Native
native 메서드에서 참조되는 상수 앞에 붙인다. (JDK1.8)
@Target*
어노테이션이 적용 가능한 대상을 지정하는데 사용한다.
@Documented*
어노테이션 정보가 javadoc으로 작성된 문서에 포함되게 한다.
@Inherited*
어노테이션이 자손 클래스에 상속되도록 한다.
@Retention*
어노테이션이 유지되는 범위를 지정하는데 사용한다.
@Repeatable*
어노테이션을 반복해서 적용할 수 있게 한다.(JDK1.8)
이 붙은 것들은 메타 어노테이션.
@Override
오버라이딩 할떄 부모 메소드의 이름을 잘못 적어 오버라이드 하더라도 컴파일러는 새로운 메소드로 인식할 뿐 에러를 뿜지 않는다.
따라서 상속받고 오버라이딩 한 메소드에 @Override라고 적으면 에러를 뿜는다.
@Deprecated
JDK가 릴리즈 될떄 기존의 메소드나 클래스의 위험, 보안 등등 여러가지 문제로 다른 메소드로 대처하거나 없애고 싶을떄 이 어노테이션을 붙임으로써 권고를 띄운다.
즉, 새로 추가된 개선된 기능을 사용하도록 유도하는 것이다.
@FunctionalInterface
함수형 인터페이스를 선언할떄 이 어노테이션을 붙이면 컴파일러는 올바르게 선언했는지 확인한다. 실수를 줄이기 위해 사용하자.
@SuppressWarning
컴파일러가 보여주는 경고 메세지가 나타지 않게 억제해준다.
JDK의 버전이 올라갈 수록 경고는 추가된다.
Deprecation
은 앞의 @Deprecated
가 붙은 대상을 사용할 떄
unchecked
는 지네릭스 타입을 지정하지 않았을떄 발생하는 경고
rawtypes
는 지네릭스를 사용하지 않아서 발생하는 경고
varargs
는 가변인자의 타입이 지네릭 타입일떄 발생하는 경고를 억제할떄 사용한다.
메타 어노테이션
어노테이션을 위한 어노테이션
어노테이션을 적용할떄 어노테이션의 적용대상이나 유지기간등을 지정한다.
@Target ({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
String[] value();
}
@Target으러 지정할 수 있는 애너테이션 적용 대상의 종류
ANNOTATION_TYPE
애너테이션
CONSTRUCTOR
생성자
FIELD
필드 ( 멤버 변수, enum 상수 )
LOCAL_VARIABLE
지역 변수
METHOD
메서드
PACKAGE
패키지
PARAMETER
매개 변수
TYPE
타입 ( 클래스, 인터페이스, enum )
TYPE_PARAMETER
타입 매개변수 (JDK1.8)
TYPE_USE
타입이 사용되는 모든 곳 (JDK1.8)
@Retention
유지 정책
@Documented
애너테이션 정보가 JavaDoc 포함
@Inherited
어노테이션이 자손 클래스에 상속되도록 한다.
출처 : 남궁성, 『 자바의 정석 3/E』, 도우출판(2016.1.27), chapter 12 인용.