티스토리 뷰
728x90
반응형
목표
자바의 애노테이션에 대해 학습하기
스터디 목차
- 애노테이션 정의하는 방법
- @retention
- @target
- @documented
- 애노테이션 프로세서
1. 애노테이션 정의하는 방법
애노테이션(Annotation) 이란?
자바에서 클래스 또는 메서드 앞에 @Override 같은 @ 표시가 애노테이션 이다.
이 애노테이션은 java5 부터 새롭게 추가되었다.
이 애노테이션으로 인해 데이터의 유효성 검사 등을 쉽게 알 수 있고, 이와 관련한 코드가 깔끔해지게 된다.
애노테이션의 용도는 다양한 목적이 있지만 메타 데이터의 비중이 가장 크다 할 수 있다.
메타 데이터(Meta-Data) : 데이터를 위한 데이터를 의미하며, 데이터에 대한 설명을 의미하는 데이터 (자신의 정보를 담고 있는 데이터)
애노테이션 정의 방법
public @interface Myannotation{}
자바에서 제공하는 애노테이션 (빌트 인 애노테이션)
- @Override - 메소드가 오버라이드 됐는지 검증한다. 만약 부모 클래스 또는 구현해야할 인터페이스에서 해당 메소드를 찾을 수 없다면 컴파일 오류가 난다.
- @Deprecated - 메소드를 사용하지 말도록 유도한다. 만약 사용한다면 컴파일 경고를 일으킨다.
- @SuppressWarnings - 컴파일 경고를 무시하도록 한다.
- @SafeVarargs - 제너릭 같은 가변인자 매개변수를 사용할 때 경고를 무시한다. (자바7 이상)
- @FunctionalInterface - 람다 함수등을 위한 인터페이스를 지정합니다. 메소드가 없거나 두개 이상 되면 컴파일 오류가 난다. (자바 8이상)
메타 애노테이션
위에서 본 기본 애노테이션 외에도 메타 애노테이션 들이 있다. 이 메타 애노테이션을 이용해 커스텀 애노테이션을 만들 수 있다.
- @Retention - 애노테이션의 범위라고 할수 있다. 어떤 시점까지 애노테이션이 영향을 미치는지 결정한다.
- @Target - 애노테이션이 적용할 위치를 결정한다.
- @Documented - 문서에도 애노테이션의 정보가 표현된다.
- @Inherited - 이 애노테이션을 선언하면 부모클래스에서 애노테이션을 상속받을 수 있다.
- @Repeatable - 반복적으로 애노테이션을 선언할 수 있게 한다.
커스텀 애노테이션 선언 방법
import java.lang.annotation.*;
@Ingerited
@Documented
@Retention(RetentionPolicy.RUNTIME) // 컴파일 이후에도 JVM에 의해서 참조가 가능하다.
@Target(ElementType.PACKAGE) // 패키지 선언시
public @interface My Annotation {
...
...
}
2. @retention
애노테이션의 범위라고 할 수 있다. 어떤 시점까지 애노테이션이 영향을 미치는지 결정한다.
@Retention(SOURCE) | 애노테이션이 소스 코드에만 이용 가능하며 컴파일 후에는 사라진다. |
@Retention(CLASS) | 애노테이션이 .class 파일에 존재하지만 런타임에는 사라짐 |
@Retention(RUNTIME) | 애노테이션이 컴파일러와 런타임에 사용 가능 |
3. @Target
애노테이션이 적용할 위치를 결정한다.
@Target(ElementType.TYPE) | 클래스의 어떤 요소에나 적용 가능, 기본값 |
@Target(ElementType.FIELD) | 클래스의 특정 필드 |
@Target(ElementType.METHOD) | 클래스의 메서드 |
@Target(ElementType.PARAMETER) | 메서드의 피라미터 |
@Target(ElementType.CONSTRUCTOR) | 생성자 |
@Target(ElementType.LOCAL_VARIABLE) | 로컬 변수 |
@Target(ElementType.ANNOTATION_TYPE) | 애노테이션 타입 |
4. @documened
documened 애노테이션을 사용한뒤 내가 java doc 문서 만들면 @documened가 붙은 애노테이션이 문서에 표기된다.
5. 애노테이션 프로세서
annotation processor는 자바 컴파일러 플러그인의 일종으로, 애노테이션에 대한 코드베이스를 검사, 수정, 생성하는 역할이다.
애노테이션을 사용하기 위해서는 애노테이션 프로세서가 필요하다.
- 애노테이션 프로세서를 사용한다는 것을 자바 컴파일러가 알고 있는 상태에서 컴파일을 수행한다.
- 애노테이션 프로세서들이 각자의 역할에 맞게 구현되어 있는 상태에서 실행되지 않은 애노테이션 프로세서를 실행한다.
- 애노테이션 프로세서 내부에서 애노테이션에 대한 처리를 한다.
- 자바 컴파일러가 모든 애노테이션 프로세서가 실행 되었는지 검사하고, 모든 애노테이션 프로세서가 실행되지 않았다면 반복한다.
Reference
elfinlas.github.io/2017/12/14/java-annotation/
im-recording-of-sw-studies.tistory.com/37
반응형
'Live Study' 카테고리의 다른 글
[JAVA 스터디] 14주차 과제 : 제네릭 (0) | 2021.02.24 |
---|---|
[JAVA 스터디] 13주차 과제 : I/O (0) | 2021.02.08 |
[JAVA 스터디] 11주차 과제 : Enum (0) | 2021.01.25 |
[JAVA 스터디] 10주차 과제 : 멀티쓰레드 프로그래밍 (0) | 2021.01.19 |
[JAVA 스터디] 9주차 과제 : 예외 처리 (0) | 2021.01.11 |
댓글