애너테이션 (annotation)

이의준·2024년 6월 12일

Java

목록 보기
71/87

Java에서 제공하는 표준 애너테이션

애너테이션설명
@Override컴파일러에게 오버라이딩하는 메서드라는 것을 알린다.
@Deprecated앞으로 사용하지 않을 것을 권장하는 대상에 붙인다.
@SuppressWarnings컴파일러의 특정 경고메시지가 나타나지 않게 해준다.
@SafeVarargs지네릭스 타입의 가변인자에 사용한다.(JDK1.7)
@FunctionalInterface함수형 인터페이스라는 것을 알린다.(JDK1.8)
@Nativenative 메서드에서 참조되는 상수 앞에 붙인다.(JDK1.8)
@Target*애너테이션이 적용가능한 대상을 지정하는데 사용한다.
@Documented*애너테이션 정보가 javadoc으로 작성된 문서에 포함되게 한다.
@Inherited*애너테이션이 자손 클래스에 상속되도록 한다.
@Retention*애너테이션이 유지되는 범위를 지정하는데 사용한다.
@Repeatable*애너테이션을 반복해서 적용할 수 있게 한다.(JDK1.8)

@Override

  • 오버라이딩을 올바르게 했는지 컴파일러가 체크하게 함
  • 오버라이딩할 때 메서드 이름을 잘못 적는 실수를 하는 것을 방지
  • 오버라이딩할 때는 메서드 선언부 앞에 @Override 붙이기
class Child extends Parent {
	@Override
    void parenMethod() {}
}

@Deprecated

  • 앞으로 사용하지 않을 것을 권장하는 필드나 메서드에 붙임
  • 이전 버전과의 호환성의 가치 떄문에 권장만 할 뿐 대상을 제거하지는 않았음
  • @Deprecated가 붙은 대상이 사용된 코드를 컴파일하면 경고 메세지가 나타남

@FUnctionallInterface

  • 함수형 인터페이스에 붙이면, 컴파일러가 올바르게 작성했는지 체크
  • 함수형 인터페이스에는 하나의 추상메서드만 가져야 한다는 제약 있음
  • 물론 함수형 인터페이스에 해당 애너테이션을 '반드시'붙여야 하는 것은 아님

@SuppressWarnings

  • 컴파일러의 경고메세지가 나타나지 않게 억제함
  • 괄호()안에 억제하고자 하는 경고의 종류를 문자열로 지정
@SuppressWarnings("unchecked") // 지네릭스와 관련된 경고를 억제
ArrayList list = new ArrayList(); // 지네릭스 타입을 지정하지 않았음
list.add(obj); // 여기서 경고 발생
  • 둘 이상의 경고를 동시에 억제하려면 다음과 같이 함
@SuppressWarnings({"deprecation", "unchecked", "varags"})
  • 'Xlint' 옵션으로 컴파일하면, 경고메세지 확인 가능


메타 애너테이션

  • 애너테이션을 만들때 사용
  • java.lang.annotation 패키지에 포함
애너테이션설명
@Target애너테이션이 적용 가능한 대상을 지정하는데 사용한다.
@Documented애너테이션 정보가 javadoc으로 작성된 문서에 포함되게 한다.
@Inherited애너테이션이 자손 클래스에 상속되도록 한다.
@Retention애너테이션이 유지되는 범위를 지정하는데 사용한다.
@Repeatable애너테이션을 반복해서 적용할 수 있게 한다. (JDK 1.8)

@Target

  • 애너테이션을 정의할 때, 적용대상 지정에 사용
대상 타입의미
ANNOTATION_TYPE애너테이션
CONSTRUCTOR생성자
FIELD필드(멤버변수, enum 상수)
LOCAL_VARIABLE지역변수
METHOD메서드
PACKAGE패키지
PARAMETER매개변수
TYPE타입(클래스, 인터페이스, enum)
TYPE_PARAMETER타입 매개변수 (JDK 1.8)
TYPE_USE타입이 사용되는 모든 곳 (JDK 1.8)

@Retention

  • 애너테이션이 유지(retention)되는 기간을 지정하는데 사용
유지 정책의미
SOURCE소스 파일에만 존재. 클래스 파일에는 존재하지 않음.
CLASS클래스 파일에 존재. 실행시에 사용 불가. 기본값
RUNTIME클래스 파일에 존재. 실행시에 사용 가능.
  • 컴파일에 의해 사용되는 애너테이션의 유지 정책은 SOURCE
  • 실행시에 사용 가능한 애너테이션의 정책은 RUNTIME

@Documented

  • javadoc으로 작성한 문서에 포함시킬때 붙임

@Inherited

  • 애너테이션을 자손 클래스에 상속하고자 할 때, @Inherited를 붙임

@Repeatable

  • 반복해서 붙일 수 있는 애너테이션을 정의할 때 사용
  • @Repeatable이 붙은 애너테이션은 반복해서 붙일 수 있음


0개의 댓글