코드 의존성이 올바른 방향을 가리키게 하기 위해서는 필요한 컴포넌트들을 외부에서 조립해주어야 한다.
- 각 컴포넌트 내부에서 생성하게 되는 경우 코드 의존성이 상위 컴포넌트를 가리키는 것이 아닌, 하위 컴포넌트를 가리키게 되기 때문
따라서 모든 클래스에 의존성을 가지는 “설정 컴포넌트(Configuration Component)”가 필요

- 이는 단일책임원칙을 위반하는 것이라고 볼 수 있지만, 애플리케이션의 나머지 부분을 깔끔하게 유지하기 위해 필요함
- 스프링에서도 이러한 조립 기능을 제공한다.
스프링에서의 의존성 주입 : 클래스패스 스캐닝
- 클래스패스 스캐닝으로 클래스패스에서 접근 가능한 모든 클래스를 확인
- @Component 어노테이션이 붙은 클래스를 찾아, 싱글톤으로 객체 생성
- 객체를 생성할 때 필요한 다른 객체를 대신 의존성 주입을 해 조립
장점
- 별도의 조립 코드를 작성하지 않고, @Component 어노테이션을 붙이는 것만으로 쉽게 구현 가능
단점
- 클래스에 프레임워크에 특화된 어노테이션을 붙어야 한다.
- 일부 의도하지 않은 클래스들이 빈으로 등록될 가능성이 높다.
스프링에서의 의존성 주입 : Config
- @Configuration 클래스 내부에서 직접 bean을 등록하고 조립하는 방법
장점
- 해당 @Configuration 클래스는 클래스패스 스캐닝으로 발견되지만, 그 외 나머지 빈은 직접 조립하기 때문에 의도되지 않은 클래스가 빈으로 등록되는 경우가 적다.
- @Component 어노테이션을 다른 클래스에 붙이지 않아도 된다.
단점
- 설정 클래스가 생성하는 빈이 설정 클래스와 같은 패키지에 존재하지 않는다면, 빈들을 모두 public으로 만들어야 함
'Architecture(아키텍처)' 카테고리의 다른 글
| [만들면서 배우는 클린 아키텍처] 11. 의식적으로 지름길 사용하기 (0) | 2024.07.20 |
|---|---|
| [만들면서 배우는 클린 아키텍처] 아키텍처 경계 강제하기 (2) | 2024.07.20 |
| [만들면서 배우는 클린 아키텍처] 08. 경계 간 매핑하기 (1) | 2024.07.20 |
| [만들면서 배우는 클린 아키텍처] 07. 아키텍처 요소 테스트하기 (0) | 2024.07.20 |
| [만들면서 배우는 클린 아키텍처] 06. 영속성 어댑터 구현하기 (0) | 2024.07.20 |