어노테이션의 경우 자바에서 없어서는 안될 기능입니다.
이번 포스팅의 경우 어노테이션에 대해 정리하고자 합니다.
Annotation이란?
- Java5 부터 등장한 기능
- 비즈니스 로직에는 영향을 주지 않지만 해당 타겟의 연결 방법이나 소스코드의 구조 변경 가능
- @Override, @Deprecated가 대표적인 예시
Annotation 특징
- 컴파일러에게 코드 문법 에러를 체크하도록 정보 제공
- 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보 제공
Build-in Annotation
-
@Override
메소드가 오버라이드 됐는지 검증 만약 부모 클래스 또는 구현해야 할 인터페이스에서 해당 메소드를 찾을 수 없다면 컴파일 오류 발생
-
@Deprecated
메소드를 사용하지 말도록 유도. 사용한다면 컴파일 경고 발생
-
@SuppressWarnings
컴파일 경고 무시
-
@SafeVarargs
제네릭 같은 가변인자 매개변수를 사용할 때 경고 무시(자바 7 이상)
-
@FunctionalInterface
람다 함수등을 위한 인터페이스를 지정. 메소드가 없거나 두 개 이상되면 컴파일 오류 발생 (자바 8 이상)
Meta Annotation을 통해 커스텀 어노테이션 제작 가능
@Retention
어노테이션의 생명 주기를 담당합니다.
- class
바이트 코드 파일까지 어노테이션 정보를 유지합니다.
리플렉션을 이용해서 어노테이션 정보를 얻을 수 없습니다.
- Runtime
바이트 코드 파일까지 어노테이션 정보를 유지하면서 리플랙션을 이용해서 런타임시에 어노테이션 정보를 얻을 수 있습니다.
- Source
컴파일 이후로 삭제되는 형태
@Documented
문서에도 어노테이션 정보가 표시됩니다.
@Target
적용할 위치를 결정합니다.
- PACKAGE : 패키지 선언 시
- TYPE : 타입 선언 시
- CONSTRUCTOR : 생성자 선언 시
- FIELD : 멤버 변수 선언 시
- METHOD : 메소드 선언 시
- ANNOTATION_TYPE : 어노테이션 타입 선언 시
- LOCAL_VARIABLE : 지역 변수 선언 시
- PARAMETER : 매개 변수 선언 시
- TYPE_PARAMETER : 매개 변수 타입 선언 시
- TYPE_USE : 타입 사용 시
@Inherited
자식클래스가 어노테이션을 상속 받을 수 있습니다.
@Repeatable
반복적으로 어노테이션을 선언할 수 있게 합니다.
참고