Annotation(어노테이션)
어노테이션은 클래스나 메소드 등의 선언시 @를 사용하는 것을 말합니다. 소스코드에 추가해서 사용할 수 있는 메타 데이터의 일종으로 컴파일 과정과 실행 과정에서 코드를 어떻게 처리해야하는지를 알려주기 위한 추가 정보입니다.
어노테이션을 사용하는 목적은 아래와 같습니다.
- 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보 제공
- 소프트웨어 개발 환경이 빌드나 배포시 코드를 자동으로 생성할 수 있도록 정보 제공
- 실행시(런타임시)에 특정 기능을 실행하도록 정보를 제공
어노테이션 종류
Java에서는 사용하기 위해 정해져 있는 어노테이션과 어노테이션을 선언하기 위한 메타 어노테이션이 있습니다.
이미 정의되어 있는 어노테이션은 아래와 같습니다.
@Override
- 선언한 메소드가 오버라이드 된 것을 의미
- 상위(부모) 클래스(또는 인터페이스)에서 해당 메소드를 찾지 못하면 컴파일 에러 발생시킴
@Deprecated
- 해당 메소드는 더이상 사용되지 않음을 표시
- 사용하는 경우 컴파일 경고 발생시킴
@SuppressWarning
- 선언한 곳의 컴파일 경고 무시함
- 어노테이션 인자에 따라 경고 메시지 제한
- @SuppressWarnings("all"): 모든 경고 메시지 무시
- @SuppressWarnings(”deprecation”) : Deprecated 메서드를 사용한 경우 발생하는 경고 메시지를 무시
- @SuppressWarnings(”fallthrough”) : switch문에서 break문을 사용하지 않을 때 발생하는 경고 메시지 무시
- @SuppressWarnings(”finally”) : finally 관련 경고 메시지 무시
- @SuppressWarnings(”null”) : null 관련 경고 메시지 무시
- @SuppressWarnings(”unchecked”) : 검증되지 않은 연산자 관련 경고 메시지 무시
- @SuppressWarnings(”unused”) : 사용하지 않는 코드 관련 경고 메시지 무시
@SafeVarargs
- 제너릭 같은 가변인자 매개변수 사용할 때 경고 무시
@FunctionalInterface
- 함수형 인터페이스 지정
- 메소드가 존재하지 않거나, 1개 이상의 메소드(default 메소드 제외)가 존재할 경우 컴파일 오류 발생
메타 어노테이션
@Retention
- 자바 컴파일러가 어노테이션을 다루는 방법을 기술하며, 특정 시점까지 영향을 미치는지 결정
- RetentionPolicy.SOURCE : 컴파일 전까지만 유효(컴파일 이후에는 사라짐)
- RetentionPolicy.CLASS : 컴파일러가 클래스를 참조할 때까지 유효
- RetentionPolicy.RUNTIME : 컴파일 이후에도 JVM에 의해 계속 참조가 가능(리플렉션 사용)
@Documented
- 해당 어노테이션을 Javadoc(API)에 포함시킴
@Target
- 어노테이션이 적용할 위치를 지정
- ElementType.TYPE: 클래스, 인터페이스, 열거 타입
- ElementType.ANNOTATION_TYPE: 어노테이션
- ElementType.FIELD: 필드
- ElementType.CONSTRUCTOR: 생성자
- ElementType.METHOD: 메소드
- ElementType.LOCAL_VARIABLE: 로컬변수
- ElementType.PACKAGE: 패키지
@Inherited
- 자식클래스에서 부모 클래스의 어노테이션을 사용 가능하다는 것을 선언
@Repeatable
- 연속적으로 어노테이션 선언