어노테이션

de_sj_awa·2021년 4월 25일
0
post-custom-banner

1. 어노테이션이란?

어노테이션은 클래스나 메소드 등의 선언시에 @를 사용하는 것을 말한다. 어노테이션은 영어로 Annotation이며, 메타데이터(Metadata)라고 불리기도 한다.

어노테이션은,

  • 컴파일러에게 정보를 알려주거나
  • 컴파일할 때와 설치(deployment) 시의 작업을 지정하거나
  • 실행할 때 별도의 처리가 필요할 때

2. 사용하기 위해 정해져 있는 3개의 어노테이션

자바 언어에는 사용하기 위해서 정해져 있는 어노테이션은 3개가 있고, 어노테이션을 선언하기 위해 메타 어노테이션이라는 것은 4개가 있다. 하지만, 이 메타 어노테이션은 선언을 위해서 존재하기 때문에 일반적으로 사용 가능한 어노테이션은 다음의 3개 뿐이다.

  • @Override
  • @Deprecated
  • @SupressWarnings

1. @Override

해당 메소드가 부모 클래스에 있는 메소드를 Override했다는 것을 명시적으로 선언한다. Override를 할 때에는 부모 클래스에 있는 메소드의 이름과 매개 변수들을 동일하게 가져간다.

2. @Deprecated

미리 만들어져 있는 클래스나 메소드가 더 이상 사용되지 않는 경우가 있다. 그런 것을 deprecated라고 하는데, 컴파일러에게 "얘는 더 이상 사용하지 않으니까 그렇게 알아줘. 그리고 나중에 누가 이거 쓰면 경고 한 번 해주고..."라고 일러 주는 것이라고 생각하면 된다.

3. @SupressWarnings

간혹 코딩을 하다 보면 컴파일러에서 경고(Warning)를 알리는 경우가 있다. 프로그램에는 문제가 없는데, 내가 잘 알아서 하는데 이러한 경고가 나타나면 웬지 마음이 불편하기도 한다. 그럴 때 컴파일러에게 "얘는 일부러 이렇게 코딩한 거니까 니가 경고를 해 줄 필요가 없어"라고 이야기 해주는 것이다.

3. 어노테이션을 선언하기 위한 메타 어노테이션

메타 어노테이션(Meta Annotation)이라는 것은 어노테이션을 직접 선언할 때 사용한다. 메타 어노테이션은 다음과 같이 4개가 존재한다.

  • @Target
  • @Retention
  • @Documented
  • @Inherited

1. @Target

어노테이션을 어떤 것에 적용할지를 선언할 때 사용한다. 적용 방법은 다음과 같다.

@Target(ElementType.METHOD)

이처럼 @Target() 괄호 안에 적용 대상을 지정하는데, 그 대상 목록은 다음과 같다.

요소 타입 대상
CONSTRUCTOR 생성자 선언시
FIELD enum 상수를 포함한 필드(field) 값 선언시
LOCAL_VARIABLE 지역 변수 선언 시
METHOD 메소드 선언시
PACKAGE 패키지 선언시
PARAMETER 매개 변수 선언시
TYPE 클래스, 인터페이스, enum 등 선언시

2. @Retention

얼마나 오래 어노테이션 정보가 유지되는지를 다음과 같이 선언한다.

@Retention(RetentionPolicy.RUNTIME)

@Target처럼 괄호 안에 지정하는 적용 가능한 대상은 다음과 같다.

대상
SOURCE 어노테이션 정보가 컴파일시 사라짐
CLASS 클래스 파일에 있는 어노테이션 정보가 컴파일러에 의해서 참조 가능함. 하지만, 가상 머신(Virtual Machine)에서는 사라짐
RUNTIME 실행시 어노테이션 정보가 가상 머신에 의해서 참조 가능

3. @Documented

해당 "어노테이션에 대한 정보가 Javadocs(API) 문서에 포함된다는 것"을 선언한다.

4. @Inherited

모든 자식 클래스에서 부모 클래스의 어노테이션을 사용 가능하다는 것을 선언한다.

추가로, @interface라는 어노테이션은 어노테이션을 선언할 때 사용한다.
참고

  • 자바의 신
profile
이것저것 관심많은 개발자.
post-custom-banner

0개의 댓글