어노테이션
Annotation
클래스나 메소드등의 선언시에 @를 사용하는 것.
JDK5부터 등장했다. 사전적 의미로는 '주석'이라는 뜻이있지만, 개발시 사용하는 '//', '/**/'와는 다르다
언제 사용되는가?
- 컴파일러에게 코드 문법 에러를 체크하도록 정보를 알려주거나
- 소프트웨어 개발툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보 제공
- 실행시(런타임시)특정 기능을 별도의 처리가 필요할 때
미리 정해져 있는 어노테이션은 5개이다.
내용은 아래와 같다
@Override
해당 메소드가 부모클래스에 있는 메소드를 override했다는 것을 명시적으로 선언한다.
만약 자식클래스에 여러개의 메소드가 있을 때 어떤 메소드가 override가 되었는지 쉽게 알 수 없을 수 있다.
실수로 매개변수가 빠졌거나 구현해야하는데 해당 메소드를 찾을 수 없다면 컴파일 시 오류가 난다.
@Deprecated
미리 만들어져있는 클래스나 메소드가 더이상 사용되지 않는 경우에 만약 사용한다면 컴파일 경고를 일으킨다.
@SuppressWarnings
컴파일 경고를 무시한다.
@SafeVarargs
Java7 부터 지원하며, 제너릭 같은 가변 인자 매개변수를 사용할 때 경고를 무시한다.
@FunctionalInterface
Java8 부터 지원하며, 람다 함수 등을 위한 인터페이스를 지정한다. 메서드가 없거나 두 개 이상 되면 컴파일 오류가 난다.
메타 어노테이션
Meta annotatio
다른 어노테이션에 적용되기 위한 어노테이션
Meta 어노테이션의 종류
- Retention: 해당 어노테이션의 정보를 어느 범위까지 유지할 것인지를 설정함
- RetentionPolicy.SOURCE: 컴파일 전까지만 유효하며 컴파일 이후에는 사라짐
- RetentionPolicy.CLASS: 컴파일러가 클래스를 참조할 때까지 유효함
- RetentionPolicy.RUNTIME: Reflection을 사용하여 컴파일 이후에도 JVM에 의해 계속 참조가 가능함
- Documented: JavaDoc 생성 시 Document에 포함되도록 함
- Target: 해당 어노테이션이 사용되는 위치를 결정함
- ElementType.PACKAGE : 패키지 선언시
- ElementType.TYPE : 타입 선언시
- ElementType.CONSTRUCTOR : 생성자 선언시
- ElementType.FIELD : 맴버 변수 선언시
- ElementType.METHOD : 메소드 선언시
- ElementType.ANNOTATION_TYPE : 어노테이션 타입 선언시
- ElementType.LOCAL_VARIABLE : 지역 변수 선언시
- ElementType.TYPE_PARAMETER : 매개 변수 타입 선언시
- Inherited: 해당 어노테이션을 하위 클래스에 적용함
- Repeatable: Java8부터 지원하며, 연속적으로 어노테이션을 선언하는 것을 허용함
참고
https://mangkyu.tistory.com/130
'언어 > JAVA' 카테고리의 다른 글
19장 자바의 역사 / JVM (0) | 2021.10.30 |
---|---|
18장 정리 (0) | 2021.10.30 |
15장 Nested 클래스 (0) | 2021.10.27 |
14장 예외처리 (0) | 2021.10.24 |
13 인터페이스 / 추상클래스 / enum (0) | 2021.10.22 |