[Java] Custom Annotation

DevHwan·2023년 1월 16일
1

커스텀 어노테이션

자바에는 막강한 기능 중 하나인 어노테이션이 있다. 어노테이션을 통해 클래스, 메소드, 변수 등 프로그램에 관한 데이터를 제공하거나 코드에 정보를 추가할 때 사용한다.

Spring 프레임워크에서는 다양한 어노테이션을 기본적으로 제공한다. ( Controller, Service 등등 )

이 밖에도 사용자는 코드에 데이터를 제공하거나 정보를 추가할 때 사용할 어노테이션을 커스터마이즈할 수 있다. 간단하게 예를 들면, 공통 관심 사항 처리를 위한 AOP가 있다.

커스텀 어노테이션 생성

어노테이션을 커스텀 할 때, 사용하는 두 종류의 어노테이션이 있다.

@Target

해당 어노테이션이 생성될 수 있는 위치를 지정하는 어노테이션이다.

@Target(ElementType.PARAMETER)            // 파라미터 타입 선언 시
@Target(ElementType.TYPE)                 // 타입 선언 시
@Target(ElementType.CONSTRUCTOR)          // 생성자 선언 시
@Target(ElementType.FIELD)                // 멤버 변수 선언 시
@Target(ElementType.METHOD)               // 메소드 선언 시
@Target(ElementType.ANNOTATION_TYPE)      // 어노테이션 타입 선언 시
@Target(ElementType.LOCAL_VARIABLE)       // 지역변수 선언 시
@Target(ElementType.TYPE_PARAMETER)       // 파라미터 타입 선언 시
@Target(ElementType.PACKAGE)              // 패키지 선언 시

@Retention

어노테이션의 유효범위를 정하는 어노테이션이다. ( 시점을 얘기한다 )

@Retention(RetentionPolicy.RUNTIME)      // 컴파일 이후 런타임까지
@Retention(RetentionPolicy.CLASS)        // 
@Retention(RetentionPolicy.SOURCE)       // 컴파일 시점까지

마무리

어노테이션의 의도는 숨겨지기 때문에 어떤 동작을 하게 되는 지, 명확하지 않다면 로직을 이해하기 어렵게 된다. 이는 커스텀 어노테이션에서 부담이 더 가중된다.

어노테이션 사용은 코드를 간결하게 만들지만, 유지보수 및 코드 명확성을 올리기 위해서 꼭 필요한 어노테이션인지 점검하는 일이 중요하다.

profile
달리기 시작한 치타

0개의 댓글