본문 바로가기
Back-end/Spring 개념

14. Annotation을 만드는 방법

by devraphy 2022. 2. 15.

0. 개요

- 이전 포스팅에서 Bean이 2개 이상인 경우를 해결하는 방법으로 @Qualifier를 언급했다.

- 그러나 @Qualifier를 사용하면 컴파일 시 문제가 발생한다. 

- 이를 해결하는 방법으로 어노테이션을 직접 생성하는데, 이에 대해 알아보자. 


1. Annotation을 생성하는 방법

a) @Qualifier의 컴파일 시 문제점 

- @Qualifier는 다음과 같이 명시한다.

@Qualifier("이름")

- 이처럼 명시를 하는데, 문제는 이름을 표현하는 문자열(= "이름")에 있다.

- 해당 문자열은 컴파일 과정에서 Bean의 타입으로 인식되지 않는다. 

- 이를 해결하기 위한 방법으로 직접 Annotation을 생성한다. 

 

b) Annotation 생성 방법 

- 우선, 어노테이션 파일을 생성한다. 

public @interface TestAnnotation {}

 

- 그리고 @Qualifier 클래스의 모든 어노테이션을 동일하게 명시한다. 

- @Qualifier 클래스에는 다음과 같은 어노테이션을 가지고 있다.

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Qualifier {

	String value() default "";

}

 

- 이를 새로 생성한 어노테이션 클래스에 동일하게 적용하고, @Qualifier 또한 명시한다.

- 이때 @Qualifier("이름")에는 클래스 이름과 동일한 이름을 사용하는데, 첫 글자를 소문자로 명시한다.  

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Qualifier("testAnnotation")
public @interface TestAnnotation {}

 

- 이렇게 어노테이션의 생성이 완료되었다. 

- 이제는 @Qualifier를 사용한 부분에 생성한 어노테이션을 적용하면 된다. 

 

c) Annotation의 기본개념 

- 어노테이션은 자바의 기술이다.

- 하지만, Spring 프로젝트에서 사용하는 대부분의 어노테이션은 Spring이 제공한다.

- 즉, Spring이 만들어 놓은 어노테이션이다. 

 

- 위에서 어노테이션을 만든 방식처럼, 다양한 어노테이션을 조합하여 새로운 어노테이션을 만들 수 있다.

- 다만, Annotaion이 자바의 기술이라는 이유로 상속의 개념이 존재한다고 추측하지 말자.

- 어노테이션은 상속이 없다.

 

d) 언제 어노테이션을 생성해야 할까?

- 대부분의 문제는 Spring에서 제공하는 어노테이션으로 해결할 수 있다. 

- 위에서는 @Qualifier의 문제를 해결하기 위해 직접 어노테이션을 생성해보았지만,

   Spring은 @Qualifier를 대신할 수 있는 다양한 어노테이션을 제공하므로, 이를 활용하도록 하자.

- 무분별한 어노테이션 생성은 오히려 유지보수를 힘들게 할 뿐이기 때문이다.   

'Back-end > Spring 개념' 카테고리의 다른 글

16. Bean Scope에 대하여  (0) 2022.02.17
15. Bean 생명주기 콜백  (0) 2022.02.16
13. @Autowired의 다양한 문제 해결방법  (0) 2022.02.14
12. Dependency Injection 방법  (0) 2022.02.11
11. Dependency Injection 기본개념  (0) 2022.02.10

댓글