Standard Of Java, Chapter 12. Annotation

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 인용.