스프링과 자바를 사용하면서 생소하게 느꼈던 문법인 어노테이션에 대해서 책을 보고 정리했습니다. 어노테이션을 직접 선언하고 사용하는 예제는 조만간 추가할 예정입니다.
어노테이션 (Annotation)
어노테이션을 클래스나 메소드 등의 선언시에 @를 사용하는 것을 말합니다.
역할
- 컴파일러에게 정보를 알려줍니다.
- 컴파일할 때와 설치 시의 작업을 지정합니다.
- 실행할 때 별도의 처리가 필요한 경우 사용합니다.
종류
자바 언어에는 사용하기 위해서 정해져 있는 어노테이션은 3개가 있고, 어노테이션을 선언하기 위한 메타 어노테이션은 4개가 있습니다.
@Override
@Override 어노테이션을 추가해주면 어떤 메소드가 부모 클래스에 있는 것을 Override 했는지 쉽게 확인이 가능합니다. 또한, 해당 메소드가 Parent 클래스에 존재하지 않는 경우 에러를 발생시킴으로써, 제대로 Override 했는지 확인할 수 있는 수단이 됩니다.
1 | public class AnnotationChild extends Parent { |
@Deprecated
@Deprecated라는 어노테이션은 더 이상 사용하지 않는 클래스나 메소드를 선언하는 데 사용됩니다. 하위호환성을 위해서 Deprecated로 선언하는 것은 꼭 필요합니다.
1 | public class AnnotationChild extends Parent { |
1 | public class AnotationSample { |
1 | Note: AnnotationSampole.java uses or overrides a deprecated API. |
@SuppressWarnings
@SuppressWarnings라는 어노테이션은 컴파일러에게 경고를 무시하도록 하는 데 사용됩니다.1
2
3
4
5
6
7public class AnotationSample {
("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). 자바의 신(김성박, 박재성 감수). 서울: 로드북.
