JavaScript & TypeScript

[Node.js] TDD를 위한 Dependency Injection

반응형

 

 

  1. 재사용성을 높여줍니다.
  2. 테스트에 용이.
  3. 코드 단순화.
  4. 종속적이던 코드의 수를 줄임.
  5. 코드의 가독성이 높아짐.
  6. 종속성이 감소. 구성 요소의 종속성이 감소하면, 변경에 민감하지 않습니다.
  7. 결합도(coupling)는 낮추면서 유연성과 확장성은 향상.
  8. 객체간의 의존관계를 설정 가능.
  9. 객체간의 의존관계를 없애거나 줄임.

 

Dependency Injection은 의존성 주입으로써 위와 같은 장점을 가집니다.

 

의존성은 A객체에서 B객체의 기능을 필요로 하는 경우 우리는 A객체는 B객체를 ‘의존한다’ 라고 표현할 수 있습니다. 왜냐하면 A객체를 온전히 사용하기 위해선 B객체가 필요합니다. 

즉, 의존대상 B객체가 변하게 되면, 그것이 A에 영향을 미치는 것입니다. 그래서 강한 결합으로써 커플링이라 부르기도 합니다.

 

주입은 내부가 아니라 외부에서 객체를 생성해서 넣어주는 것을 말합니다.

 

즉 의존성 주입은 내부에서만든 변수를 외부에서 넣어주게 만드는 것 입니다.

외부에서 주입만 하는것이 아니라, 의존관계 역전원칙을 통해 의존성을 제거해야 합니다.

 

의존관계 역전 원칙

객체 지향 프로그래밍에서 의존관계 역전 원칙은 소프트웨어 모듈들을 분리하는 특정 형식을 지칭한다.
이 원칙을 따르면, 상위 계층(정책 결정)이 하위 계층(세부 사항)에 의존하는 전통적인 의존관계를 반전(역전)시킴으로써 상위 계층이 하위 계층의 구현으로부터 독립되게 할 수 있다. 이 원칙은 다음과 같은 내용을 담고 있다.
 
첫째, 상위 모듈은 하위 모듈에 의존해서는 안된다. 상위 모듈과 하위 모듈 모두 추상화에 의존해야 한다.
둘째, 추상화는 세부 사항에 의존해서는 안된다. 세부사항이 추상화에 의존해야 한다.

이 원칙은 '상위와 하위 객체 모두가 동일한 추상화에 의존해야 한다'는 객체 지향적 설계의 대원칙을 제공한다

 

 

기본적으로 객체지향 프로그래밍 패러다임에서는 높은 응집성(Cohesion)과 낮은 결합성(Coupling)을 가져야 합니다.

그러므로 DI를 적용하여 프로그래밍 하는게 중요합니다.

응집성 : 하나의 모듈이 단일의 역할만 할 경우, 결합성 : 모듈이 다른 모듈에 얼마나 의존하는지

 

DI의 유일한 단점은 외부에서 주입을 해주어야 하기 때문에 모든 것을 미리 설정해야 한다는 것입니다.

하지만 그 단점을 보완하는 라이브러리가 존재하기 때문에 DI의 중요성은 큰 것 같습니다.

 

참고

https://getchan.github.io/til/node_DI/

https://charming-kyu.tistory.com/17

https://tsh.io/blog/dependency-injection-in-node-js/

 

 

 

 

 

반응형

'JavaScript & TypeScript' 카테고리의 다른 글

[TS] Type Script  (0) 2022.03.06
[node.js] TDD / Jest(관련링크)  (0) 2022.03.05
[Node.js] Sequelize ondelete  (0) 2022.02.15
[JS] CommonJS와 ES6  (0) 2022.02.13
[JS] 반복문에 promise  (0) 2022.02.07