클래스들을 인스턴스화하고 묶기 위해 평범한 자바, 스프링, 스프링 부트 프레임워크에서 어떻게 의존성 주입 매커니즘을 이용하는지 살펴본다.
코드의 의존성이 올바른 방향을 가리키게 하기 위해서이다. 모든 의존성은 안쪽으로, 애플리케이션의 도메인 코드 방향으로 향해야 도메인 코드가 바깥 계층의 변경으로부터 안전하다.
이 프로그래밍 스타일의 유익한 부수효과 중 하나는 테스트하기 쉽다는 것이다. 한 클래스가 필요로 하는 모든 객체를 생성자로 전달할 수 있따면 실제 객체 대신 목으로 전달할 수 있고, 격리된 단위 테스트를 생성하기 쉬워진다.
의존성 규칙을 어기지 않고 객체 인스턴스를 생성할 책임을 부가하기 위해 설정 컴포넌트가 있어야 한다.
**설정 컴포넌트(configuration component)**의 역할
설정 컴포넌트는 설정 파일이나 커맨드라인 파라미터 등과 같은 설정 파라미터의 소스에도 접근할 수 있어야 하는데, 애플리케이션이 조립되는 동안 설정컴포넌트는 이러한 파라미터를 애플리케이션 컴포넌트에 제공해서 행동 양식을 제어하기 때문이다.
단일 책임 원칙을 위반하지만, 애플리케이션의 나머지 부분을 깔끔하게 유지하기 위해 구성요소들을 연결하는 바깥쪽 컴포넌트가 필요하다.