✅ https://github.com/whiteship/live-study
👍목표
자바의 애노테이션에 대해 학습하세요.
📖학습할 것 (필수)
📌 애노테이션 정의하는 방법
📌 @Retention
📌 @Target
📌 @Documented
📌 애노테이션 프로세서
💡 애노테이션 정의하는 방법
어노테이션이란 애플리케이션이 처리해야 할 데이터가 아니라, 컴파일 과정 실행 과정에서 코드를 어떻게 컴파일하고
처리할 지 알려주는 정보인 메타 데이터라 할 수 있다.
어노테이션의 용도는 다음과 같다.
1. 컴파일러에게 코드 문법 에러를 체크하도록 정보 제공한다.
2. 소프트웨어 개발도구가 빌드나 배치 시에 코드를 자동으로 생성할 수 있도록 제공한다.
3. 런타임 시 특정 기능을 실행하도록 정보를 제공한다.
어노테이션을 정의하는 방법은 인터페이스를 정의하는 방법과 유사하다. interface 키워드 왼쪽에 @를 추가적으로 작성
하면 인터페이스 대신 어노테이션을 적용할 수 있다.
public @interface AnnotationName {
}
사용 방법은
@AnnotationName
정의한 어노테이션의 이름에 @를 붙여 사용할 수 있다.
어노테이션은 element를 멤버로 가질 수 있으며, 디폴트 값을 가질 수 있다.
public @interface AnnotationSample {
type elementName() [default 값];
}
💡 @Retention
어노테이션 정의 시 추가적으로 작성해야 하는 어노테이션이 필요하다. 어노테이션을 어느 범위까지 유지할 것인지 지정해야 하며 어노테이션 유지 정책은 java.lang.anootation.RetentionPolicy enum 상수로 정의되어 있다.
RetentionPolicy | 설명 |
SOURCE | 소스 코드 상에서만 어노테이션의 정보를 유지하며 소스 코드를 분석할 때에만 의미가 있다. 바이트코드에는 정보가 남지 않는다. |
CLASS | 바이트코드까지 어노테이션의 정보를 유지하지만 리플렉션을 이용해서 어노테이션의 정보를 얻는 것은 불가능하다. |
RUNTIME | 바이트코드까지 어노테이션 정보를 유지하면서 리플렉션을 이용해서 런타임 시에 어노테이션 정보를 얻을 수 있다. |
※리플렉션이란? 런타임 시에 클래스의 메타데이터를 얻는 기능을 말한다.
@Target({ElementType.FIELD, ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationSample {
}
💡 @Target
@Target은 어노테이션이 적용될 대상을 지정할 때 사용하며 @Target의 기본 엘리먼트인 value는 enum 타입의 ElementType 배열을 값으로 가진다.
@Target(ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
public @interface AnnotationSample {
}
@Target의 적용이 되는 대상은 다음과 같다.
ElementType 종류 | 적용 대상 |
TYPE | 클래스, 인터페이스, enum |
ANNOTATION_TYPE | 어노테이션 |
FIELD | 필드 |
CONSTRUCTOR | 생성자 |
METHOD | 메서드 |
LOCAL_VARIABLE | 지역 변수 |
PACKAGE | 패키지 |
@Target({ElementType.FIELD, ElementType.TYPE, ElementType.METHOD})
public @interface AnnotationSample {
}
@AnnotationSample
public class ClassSample {
@AnnotationSample
private String field;
// @AnnotationSample -> 불가능 @Target에 CONSTRUCTOR 선언 하지 않아 불가능
public ClassSample(){
}
@AnnotationSample
public void method() {
}
}
💡 @Documented
@Documented 어노테이션은 자바 1.5에 추가되었으며 어노테이션 정의 시 @Target, @Retention과 같이 사용되며,
javadoc으로 api 문서를 만들 때 어노테이션에 대한 설명도 포함되도록 지정하는 어노테이션이다.
@Target({ElementType.FIELD, ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AnnotationSample {
}
💡 애노테이션 프로세서
Annotation Processor란 자바 컴파일러의 컴파일 단계에서 정의한 어노테이션의 소스 코드를 분석하고 처리하기 위해
사용하는 훅이라고 한다. Annotation Processor의 대표적인 플러그인으로는 Lombok이 있고 Lombok의 @Getter,
@Setter, @Data 등의 어노테이션을 사용하여 보일러 플레이트 코드를 줄일 수 있다는 장점이 있다.
=====
어노테이션과 어노테이션 프로세서에 대한 추가적인 학습이 이뤄지면 내용 추가할 예정!
References
이것이 자바다(신용권 저)
kkambi.tistory.com/84(어노테이션 프로세서)
blog.sunimos.me/12(@Documented)
TCP School
'스터디할래(Java 시리즈) > 스터디 과제' 카테고리의 다른 글
스터디할래 - 14주차 과제: 제네릭 (0) | 2021.03.05 |
---|---|
스터디할래 - 13주차 과제: I/O (0) | 2021.02.20 |
스터디할래 - 11주차 과제: Enum (0) | 2021.02.16 |
스터디할래 - 10주차 과제: 멀티쓰레드 프로그래밍 (0) | 2021.01.22 |
스터디할래 - 9주차 과제: 인터페이스 (0) | 2021.01.16 |