의존성 역전 원칙 (Dependency Inversion Principle)
•
상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안 된다.
둘 모두 추상화에 의존해야 한다.
•
추상화는 구체적인 사항에 의존해서는 안 된다.
구체적인 사항은 추상화에 의존해야 한다.
•
모듈:
◦
전체 시스템을 작은 단위로 쪼개놓은 것이다.
◦
자바에서는 패키지가 모듈을 설명해준다.
•
현재 모듈 구성도
•
일반적인 의존관계는 상위에서 하위로 만들어진다.
•
추상화? ⇒ 인터페이스를 도입하는 것이다.
•
상위 수준의 모듈은 하위 수준의 모듈에 의존하면 안 된다!
◦
해당 구성도는 의존성 역전 원칙을 지키지 못하고 있다!
◦
인터페이스 소유권의 역전이 필요하다.
(의존성 역전 원칙에 중요한 축 - Separated Interface 패턴)
◦
인터페이스는 자기를 구현한 클래스 쪽이 아니라 자기를 사용하는 쪽에 있는 게 더 자연스러운 경우가 많이 있다.
•
인터페이스 소유권 역전 후 - 의존성 역전 원칙 적용 (인터페이스 만든 후 추상화 시킴)
◦
인터페이스를 사용하는 코드가 있는 해당 모듈로 소유권을 이전시킨다!
(하위 모듈이 상위 모듈을 의존하는 코드가 만들어짐)