Dependency inversion principle
상위레벨 모듈이 하위레벨 모듈에 의존하면 안된다.
- 상위/하위 모듈 모두 추상화에 의존해야 한다.
- 추상화는 구현체를 의존하면 안된다.
중요한점
- OO의 핵심이다.
- IoC를 통해 상위래밸의 모듈을 하위레벨 모듈로 부터 보호하는 것이다.
- 이를 통해 OCP를 지키고, 새로운 요구사항을 반영 가능
예제
- let) 편의상 Object A => A, Object B => B, interface A => a 라고 하자…
{: .center-image} - Figure1 그림에서, A -> B 방향으로
Compile time의존성과Run time의존성을 갖고있다. - Figure2 그림에서, A,B -> a 방향으로
Compile time의존성을 맺었지만,Run time의존성은 그대로이다. - 즉, 더이상 A는 B로 의존하지 않으며, A,B 둘다
Compile time에 a에 의존하게 된다. - 이때, B의
Compile time의존성 방향이, A의Run time의존성 방향과 반대가 되게 된다.이와같이 소스 코드의 의존성 방향이 제어의 흐름과 반대 방향이 될 때, 의존성이 역전됐다고 한다.
DIP는
Run time의존이 아닌Compile time (source code)의존을 역전시킴으로써 변경의 유연함을 확보할 수 있도록 만들어주는 원칙이다.
- 위 예제에서
Package를 보면, DIP가 적용됨에 따라,interface를Package A에서 가져가게 되었다. - 즉,
interface타입을 가져감으로써 A와 B를 독립적으로 배포(jar, DLL 등)할 수 있도록 만들어 준다.