inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

인프런 워밍업 과제 BE - 1일차 과제

박정은
1

어노테이션을 사용하는 이유(효과)는 무엇일까?

어노테이션이란?

 

어노테이션을 사용하는 효과

 


 

나만의 어노테이션은 어떻게 만들 수 있을까?

커스텀 어노테이션은 왜 사용할까?

커스텀 어노테이션을 사용하는 방법

판매가능한 사과에는 판매가능(@CanSale) 라벨지를 달아서 포장과정시 이를 판별하여 제품을 포장한다고 가정한다면, 타겟에 적합한 라벨지를 만들어야 한다. 라벨에는 이 라벨을 붙일 대상을 명시하고, 언제까지 타겟에 부착할 것인지를 적는다. 그리고 라벨에 이름을 적으면 라벨이 만들어진다. 사과의 상태에 따라 판매가능 라벨을 부착하여 싱싱한 사과라는 타겟에 판매가능이라는 어노테이션을 부착하게 되고, 제품 포장 과정에서는 이 라벨을 보고 판별하여 제품을 포장하는 것이다.

위의 비유와 같이, 어노테이션을 정의한 후 원하는 타겟에 적용하면 된다. 그 후, 어노테이션이 붙은 타겟을 어떻게 사용할지 기능을 구현하면 해당 기능이 실행될 때 타겟에 붙은 어노테이션에 따라서 타겟의 경로가 결정된다.


위의 시나리오로 CanSale 어노테이션을 정의해보자.

CanSale 어노테이션 정의하기

@Target(ElementType.TYPE) // 클래스 레벨에 어노테이션 적용
@Retention(RetentionPolicy.RUNTIME) // 런타임까지 어노테이션 정보 유지
public @interface CanSale {
    String target();
    String validUntil();
    String labelName();
}

CanSale 어노테이션을 사용하는 클래스 정의하기

@CanSale(target = "FreshApple", validUntil = "2024-02-19", labelName = "FreshAppleSale")
public class Apple {
    private boolean isFresh;

    public Apple(boolean isFresh) {
        this.isFresh = isFresh;
    }

    public boolean isFresh() {
        return isFresh;
    }
}

어노테이션 정보 처리하기

public class PackagingProcess {
    public static void packageProduct(Object product) throws Exception {
        if (product.getClass().isAnnotationPresent(CanSale.class)) {
            CanSale saleInfo = product.getClass().getAnnotation(CanSale.class);
            System.out.println("Packaging " + saleInfo.target() + ". Valid until: " + saleInfo.validUntil() + ". Label: " + saleInfo.labelName());
            // 유효기간, 라벨이름 등을 판단하여 포장 처리
        } else {
            System.out.println("판매할 수 없는 물건입니다.");
        }
    }

    public static void main(String[] args) throws Exception {
        Apple apple = new Apple(true); // 싱싱한 사과 인스턴스 생성
        packageProduct(apple); // 제품 포장 시도
    }
}

 

커스텀 어노테이션을 선언할 때 메타 어노테이션을 함께 사용하기

메타 어노테이션(meta-annotation) 이란?

 

주요 메타 어노테이션

@Target

@Retention

@Documented

@Inherited

@Repeatable

 


참고

https://seongeun-it.tistory.com/142

https://www.nextree.co.kr/p5864/

https://ittrue.tistory.com/158

백엔드

답변 0