코커두드 2023. 6. 21. 01:19

🚨 이 글은 개인 학습을 위한 기록입니다. 잘못된 정보가 상당수 있을 수 있습니다.

🍀 개요

과제를 수행하다가 Custom Annotation을 만들어서 구현해내야 하는 상황이 발생했다.

레퍼런스 코드를 참조하며 수행하다가 다음과 같은 문제가 발생했다.

에러가 상당히 많이 발생했다는 걸 알 수 있다.

문제를 해결하기 위해 찾아보다가 커스텀 어노테이션에 대해 알게되었다.

 

📗 커스텀 어노테이션이란?

어노테이션 : 소스 코드가 컴파일되거나 실행될 때 컴파일러 및 다른 프로그램에게 필요한 정보를 전달해주는 문법

커스텀 어노테이션 : 원하는대로 커스텀해서 직접 만드는 어노테이션

 

🚌 구현

interface 앞에 @를 빼놓지 말자! 

• @interface를 제대로 입력하면 빨간줄이 사라진다.

• PriceRangeValidator.Class의 빨간줄은 클래스를 구현하면 사라진다.

 

커스텀 어노테이션을 구현하기 위해 필요한 어노테이션에 대해 살펴보자.

 

(1) @Retention

- 어노테이션의 지속시간 결정

- RetentionPolicy : Retention 어노테이션의 속성

- 유지정책 : 애너테이션이 유지되는 기간을 지정하는 속성

- 유지정책에는 세가지가 있다. → source, class, runtime

- sources : 소스파일에 존재, 클래스 파일에는 존재 x. 컴파일 이후 어노테이션 소멸

- class : 클래스 파일에 존재, 실행시 사용 불가, 기본값. 클래스를 참조할 때까지 유효함

- runtime : 클래스 파일에 존재, 실행시 사용 가능. 컴파일 이후에도 어노테이션 참조 가능

 

(2) @Target

- 어노테이션을 적용할 대상을 지정

- 대상타입 : TYPE, FIELD, METHOD, PARAMETER 등...

- FIELD로 지정 : 위에서는 필드(멤버변수, 열거형 상수) 선언시를 시점으로 지정해주었다.

 

(3) @Constraint

- 사용자가 원하는 제한 사항과 유효성 검증을 만들어 적용 가능하다.