본문 바로가기
교육후 개인공부/Computer Science

[CS] DI, DIP

by 뭉지야 2024. 1. 28.
728x90

DI(dependency injection)

-의존성주입(DI)이란 메인 모듈이 '직접' 다른 하위 모듈에 대한 의존성을 주기보다는 중간에 의존성 주입자가 이 부분을 가로채 메인모듈이 '간접'적으로 의존성을 주입하는 방식이다.

-이를 통해 메인 모듈과 하위모듈간의 의존성을 조금 더 느슨하게 만들수 있으며 모듈을 쉽게 교체 가능한 구조로 만든다.

-A가 B에 의존한다 = B가 변하면 A에 영향을 미치는 관계 = A -> B   

 

의존관계역전원칙

-의존성 주입을 할때는 의존관계역전원칙(DIP, dependency inversion principle)이 적용된다.

*이는 2가지 규칙을 지키는 상태를 말한다.

  -상위모듈은 하위 모듈에 의존해서는 안된다. 둘다 추상화에 의존해야 한다.

  -추상화는 세부사항에 의존해서는 안된다. 세부사항은 추상화에 따라 달라져야 한다.

 

 

의존성주입의 장점

- 외부에서 모듈을 생성하여 dev.add(new BackendDeveloper()) 이런식으로 집어넣는 구조가 되기 때문에 모듈들을 쉽게 교체할수 있는 구조가 된다.

- 단위 테스팅과 마이그레이션이 쉬워진다.

- 애플리케이션 의존성 방향이 좀 더 일관되어 코드를 추론하기가 쉬워진다.

 

의존성주입의 단점

- 결국에는 모듈이 더 생기게 되므로 복잡도가 증가한다.

- 종속성 주입자체가 컴파일을 할 때가 아닌 런타임 때 일어나기 때문에 컴파일을 할때 종속성 주입에 관한 에러를 잡기가 어려워질수 있다.

 


전략패턴과 의존성주입의 차이는 무엇일까????

전략패턴, 의존성주입 모두 무언가를 쉽게 교체하기 위한 디자인패턴이라는 공통점이 있다.

그러나

-전략패턴: 어떠한 동일한 행동 계약을 기반으로 다양한 구현이 명시되어있는 인터페이스를 만드는 것을 포함한다.

-의존성주입: 단지 일부 동작을 구현하고 의존성을 주입하기만 하는 패턴이다.

     

728x90

'교육후 개인공부 > Computer Science' 카테고리의 다른 글

[CS] 디자인패턴  (0) 2024.01.27
[CS] 추상화  (0) 2024.01.26
[CS] 오버로딩, 오버라이딩  (0) 2024.01.26
[CS] static 키워드  (0) 2024.01.26
[CS] 클래스, 객체, 인스턴스  (0) 2024.01.23