스프링과 자바를 사용하면서 생소하게 느꼈던 문법인 어노테이션에 대해서 책을 보고 정리했습니다. 어노테이션을 직접 선언하고 사용하는 예제는 조만간 추가할 예정입니다.


어노테이션 (Annotation)

어노테이션을 클래스나 메소드 등의 선언시에 @를 사용하는 것을 말합니다.

역할

  • 컴파일러에게 정보를 알려줍니다.
  • 컴파일할 때와 설치 시의 작업을 지정합니다.
  • 실행할 때 별도의 처리가 필요한 경우 사용합니다.

종류

자바 언어에는 사용하기 위해서 정해져 있는 어노테이션은 3개가 있고, 어노테이션을 선언하기 위한 메타 어노테이션은 4개가 있습니다.

@Override

@Override 어노테이션을 추가해주면 어떤 메소드가 부모 클래스에 있는 것을 Override 했는지 쉽게 확인이 가능합니다. 또한, 해당 메소드가 Parent 클래스에 존재하지 않는 경우 에러를 발생시킴으로써, 제대로 Override 했는지 확인할 수 있는 수단이 됩니다.

1
2
3
4
5
6
public class AnnotationChild extends Parent {
@Override
public void printName() {
System.out.println("AnnotationChild");
}
}

@Deprecated

@Deprecated라는 어노테이션은 더 이상 사용하지 않는 클래스나 메소드를 선언하는 데 사용됩니다. 하위호환성을 위해서 Deprecated로 선언하는 것은 꼭 필요합니다.

1
2
3
4
5
public class AnnotationChild extends Parent {
@Deprecated
public void noMoreUse() {
}
}
1
2
3
4
5
6
public class AnotationSample {
public void useDeprecated() {
AnnotationChild child = new AnnotationChild();
child.noMoreUse();
}
}
1
2
Note: AnnotationSampole.java uses or overrides a deprecated API. 
Note: Recompile with -Xlint:deprecation for details.

@SuppressWarnings

@SuppressWarnings라는 어노테이션은 컴파일러에게 경고를 무시하도록 하는 데 사용됩니다.

1
2
3
4
5
6
7
public class AnotationSample {
@SupressWarnings("deprecation")
public void useDeprecated() {
AnnotationChild child = new AnnotationChild();
child.noMoreUse();
}
}

메타 어노테이션 (Meta Annotation)

메타 어노테이션은 어노테이션을 선언할 때 사용합니다. 다음과 같이 4개가 존재합니다.

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

@Target

어노테이션을 어떤 것에 적용할지 선언할 때 사용합니다.

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

@Retention

어노테이션 정보가 얼마나 오래 유지되는지를 선언합니다.

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

@Documented

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

@Inherited

모든 자식 클래스에서 부모 클래스의 어노테이션을 사용할 수 있다는 것을 선언합니다.


참고문헌

이상민. (2013). 자바의 신(김성박, 박재성 감수). 서울: 로드북.