하나의 객체가 다른 객체의 의존성을 제공하는 테크닉
의존성 주입은 프로그램 디자인이 결합도를 느슨하게 되도록하고 소프트웨어 모듈 분리, 단일 책임 원칙를 통해 클라이언트의 생성에 대한 의존성을 클라이언트의 행위로부터 분리하는 것입니다.
의존성 주입은 네 가지 역활을 담당하는 객체 및 인터페이스를 전제로 합니다.
· 사용될 서비스의 객체
· 사용하는 서비스에 의존하는 클라이언트 객체
· 클라이언트의 서비스 사용 방법을 정의하는 인터페이스
· 서비스를 생성하고 클라이언트로 주입하는 책임을 갖는 주입자
현실 세계로 예시를 들면 아래와 같습니다.
· 서비스 - 자동차
· 클라이언트 - 운전자
· 인터페이스 - 운전자가 기어와 같은 엔진 세부 사항을 이해할 필요가 없도록 보장해주는 자동변속기
· 주입자 - 아이에게 어떤 차를 사줄지 결정하고 구매해준 부모
Node.js 예시 코드
export default class UserService {
constructor(userModel, companyModel, salaryModel){
this.userModel = userModel;
this.companyModel = companyModel;
this.salaryModel = salaryModel;
}
getMyUser(userId){
// models available throug 'this'
const user = this.userModel.findById(userId);
return user;
}
}
서비스에서는 위와 같이 필요한 모델을 정의해서 의존성 주입을 사용합니다.
결론
의존성 주입을 통해서 코드의 재사용성이 높아지기 때문에 유지보수 비용을 절감할 수 있습니다.