Backend/Spring+Boot

의존성 주입시 중복되는 타입에 대한 처리

findmypiece 2021. 7. 23. 00:49
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