−여기서 의존성은 다른 코드가 일을 끝내기 위해 사용하는 대상이다. 데이터베이스 접근 객체, 시계, 파일 저장소도 의존성이다. 주입이라는 말은 특별한 런타임 기술보다는 관계를 가리킨다. 사용하는 코드가 내부에서 직접 만들던 대상을 바깥의 조립 코드가 넘겨주는 관계다. 그래서 생성자의 인수나 함수의 매개변수로 협력자를 전달하는 작은 프로그램에서도 이 관계를 볼 수 있다.
이 구분이 필요한 이유는 프로그램에 서로 다른 종류의 변경이 생기기 때문이다. 할인 정책의 변경은 업무 로직을 바꾸지만, 같은 정책에 테스트용 저장소를 연결하는 일은 프로그램의 구성만 바꾼다. 두 변경을 한곳에서 처리하면 테스트를 실행하려고 실제 DB를 준비하거나 전송 수단을 바꾸려고 업무 코드까지 수정하게 된다. DI는 그 연결 지점을 밖으로 드러내는 방법이다.
의존성 주입은 세 질문으로 나눠 읽을 수 있다. 무엇을 사용할 것인지, 누가 그것을 연결하는지, 연결한 대상은 언제까지 살아 있는지다. 앞의 두 질문은 구성 관계를, 마지막 질문은 객체의 수명을 다룬다.
+여기서 의존성은 다른 코드가 일을 끝내기 위해 사용하는 대상이다. 데이터베이스 접근 객체, 시계, 파일 저장소도 의존성이다. 주입은 이 대상을 사용하는 코드가 내부에서 직접 만드는 대신 바깥의 조립 코드가 넘겨주는 관계를 가리킨다. 생성자의 인수나 함수의 매개변수로 협력자를 전달하는 작은 프로그램에서도 이 관계를 볼 수 있다.
프로그램에는 서로 다른 종류의 변경이 생긴다. 할인 정책의 변경은 업무 로직을 바꾸지만, 같은 정책에 테스트용 저장소를 연결하는 일은 프로그램의 구성만 바꾼다. 두 변경을 한곳에서 처리하면 테스트를 실행하려고 실제 DB를 준비하거나 전송 수단을 바꾸려고 업무 코드까지 수정하게 된다. DI는 그 연결 지점을 밖으로 드러내는 방법이다.
의존성 주입을 읽을 때는 무엇을 사용할지, 누가 연결할지, 연결한 대상은 언제까지 살아 있을지를 살펴본다. 앞의 두 질문은 구성 관계를, 마지막 질문은 객체의 수명을 다룬다.