[백기선님과 함께하는 Live-Study] 12주차 - 애노테이션

JoonYoung Maeng·2021년 2월 5일
0
post-thumbnail

✔️ 목표

자바의 애노테이션에 대해 학습하세요.

✔️ 학습할 것 (필수)


✏️ 애노테이션이란?

자바에서 애노테이션(Annotation)은 JEE5(Java Platform, Enterprise Edition 5)부터 새롭게 추가된 요소로서 데이터의 유효성 검사 등을 쉽게 알 수 있으며, 런타임과 컴파일 시에 해석이된다.

애노테이션이 추가되기 전의 자바는 각각의 레이어 별 설정을 XML 설정파일에 명시하였다. 이러한 방식은 변경되는 데이터들의 설정을 외부파일에서 분리하기 때문에 재컴파일 없이 변경사항을 적용할 수 있다는 장점이 있지만, 방대한 설정들을 변경하는데는 무리가 있었다.

하지만, 애노테이션의 등장으로 데이터의 유효성 검사를 Model 클래스에 직접 명시함으로써 데이터들에 대한 유효조건을 쉽게 파악할 수 있게 되었다.


💡애노테이션 정의하는 방법

애노테이션을 정의하는 방법은 사용하려는 클래스 혹은 메소드 앞에 애노테이션을 붙여주면된다.

package com.livestudy.twelveth;

import study.Car;

public class AnnotationTest implements Car {
    @Override
    public boolean isHybrid() {
        return false;
    }
}

📌 Java Built-In 애노테이션

자바 SDK에서 지원하는 애노테이션이다.

  • @Override : 해당 메소드가 상위 클래스의 메소드를 오버라이드하고 있다는 것을 컴파일러에게 알려주는 애노테이션
  • @Deprecated: 마커 애노테이션으로 차후 버전에 지원되지 않을 가능성이 있기 때문에 더 이상 사용하지 말아야한다는 것을 알려주는 애노테이션
  • @SurpressWarning : 경고를 제거하는 애노테이션

💡 메타 애노테이션

애노테이션을 선언할 때 사용하는 애노테이션이다.

메타 애노테이션의 종류는 @Target, @Rentation, @Documented, @Inherited가 있다.

✏️ @Target

@Target 애노테이션자바 컴파일러가 애노테이션이 어디에 적용될지 결정하기 위해 사용한다.

@Target(ElmentType.요소) 형식으로 사용되며 요소에는 다음과 같은 요소가 들어갈 수 있다.

👉🏻 요소에 들어갈 수 있는 것

  • CONSTRUCTOR : 생성자 선언 시
  • FIELD : enum 상수를 포함한 필드값 선언 시
  • LOCAL_VARIABLE : 역 변수 선언 시
  • METHOD : 메소드 선언 시
  • PACKAGE : 패키지 선언 시
  • PARAMETER : 매개 변수 선언 시
  • TYPE : 클래스, 인터페이스, Enum 등 선언 시
package com.livestudy.twelveth;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.FIELD)
public @interface CustomAnnotation {
    String name();
}

✏️ @Retention

@Rentation 애노테이션애노테이션이 실제로 적용되고 유지되는 범위를 나타내기 위해 사용한다.

@Retention(RetentionPolicy.요소) 형식으로 사용되며 요소에는 다음과 같은 요소가 들어갈 수 있다.

👉🏻 요소에 들어갈 수 있는 것

  • SOURCE : 컴파일 이후에도 JVM에 의해서 계속 참조가 가능하다.
  • CLASS : 컴파일러가 클래스를 참조할 때까지 유효하다.
  • RUNTIME : 컴파일 전까지만 유효하고, 컴파일 후에는 사라진다.
package com.livestudy.twelveth;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
public @interface CustomAnnotation {
    String name();
}

✏️ @Documented

@Documented 애노테이션애노테이션이 지정된 대상의 JavaDoc에 이 어노테이션의 존재를 표기하도록 지정하기 위해 사용한다.

✏️ @Inherited

@Inherited 애노테이션애노테이션을 사용한 상위 클래스를 상속한 하위 클래스에서도 해당 애노테이션을 갖도록 하기위해 사용한다.


💡애노테이션 프로세서

애노테이션 프로세서는 말 그대로 애노테이션을 이용해 프로세스를 처리하는 것을 말하며, 컴파일 단계에서 애노테이션에 정의된 액션을 처리한다. 애노테이션 프로세서를 통해서 실행되기 전에 체크를 하면서 애노테이션이 의도한 대로 이루어지지 않는 경우 에러나 경고 표시를 해주기도 하며, 소스코드(.java)와 바이트코드(.class) 파일을 만들어 주기도 한다.

대표적인 애노테이션 프로세서로는 Lombok이 있다.


📃 Reference

애노테이션 : https://hiddenviewer.tistory.com/88

애노테이션 프로세서 : https://im-recording-of-sw-studies.tistory.com/37

애노테이션 프로세서 : https://better-dev.netlify.app/java/2020/09/07/thejava_16/

profile
백엔드 개발자 지망생입니다!

0개의 댓글