728x90
특정 클래스의 의존성을 주입하려고 할 때 동일한 타입이 여러개 존재하는 경우가 있을 수 있다. 하나의 Interface 를 다수의 클래스에서 implements 해서 다형성을 구현한 경우가 바로 그것인데 @Autowired 를 통한 의존성 주입이나 생성자를 통한 의존성 주입 모두 타입을 기준으로 하기 때문에 이 경우 적절한 Bean을 결정하지 못해 의존성 주입이 실패한다.
이 때는 일반적으로 @Qualifier 어노테이션을 통해 Bean id 를 명시해주면 해당 의존성이 정상적으로 주입된다. 하지만 이것 말고도 의존성을 주입하려는 클래스 변수의 명칭을 Bean id로 만들면 @Qualifier 어노테이션을 명시한 것과 동일한 효과를 볼 수 있다.
뭔가 더 간단하고 쉬운 방법인 것 같지만 서칭을 해보니 이 방법을 사용할 경우 단점도 있다. 간단하게 말해 코드 자체가 Bean id 와 강하게 결합된 상태가 되어 Bean id를 변경할 경우 수정 범위가 상당히 많아질 수 있다는 것이다.
개발을 진행하다보면 인터페이스로 큰 틀만 만들어 놓고 순차적으로 구현을 하게 되는데 이 과정에서 Bean id 는 목적에 따라 얼마든지 바뀔 수 있는데 클래스 변수의 명칭을 Bean id로 만들게 되면 그 부분 역시 모두 변경해 줘야 하는 불상사가 생긴다. 반면 @Qualifier 를 사용할 경우 Bean id 가 변경되더라도 딱 그 부분만 수정하면 된다.
728x90
'Backend > Spring+Boot' 카테고리의 다른 글
@RequestParam, @ModelAttribute 생략 (0) | 2021.08.04 |
---|---|
Thymeleaf 훑어보기 (0) | 2021.07.30 |
Spring에서 권장되는 의존성 주입 방법 (0) | 2021.07.23 |
RestClient 구성시 고려사항 (0) | 2021.07.20 |
UriComponentsBuilder (0) | 2021.07.19 |