디자인패턴
Dependency Inversion Principle
hik14
2021. 12. 28. 16:12
객체 지향 프로그래밍에서 의존관계 역전 원칙은 소프트웨어 모듈들을 분리하는 특정 형식을 지칭한다.
이 원칙을 따르면, 상위 계층(정책 결정)이 하위 계층(세부 사항)에 의존하는 전통적인 의존관계를 반전(역전)시킴으로써 상위 계층이 하위 계층의 구현으로부터 독립되게 할 수 있다.
첫째, 상위 모듈은 하위 모듈에 의존해서는 안된다. 상위 모듈과 하위 모듈 모두 추상화에 의존해야 한다.
둘째, 추상화는 세부 사항에 의존해서는 안된다. 세부사항이 추상화에 의존해야 한다.
이 원칙은 '상위와 하위 객체 모두가 동일한 추상화에 의존해야 한다'는 객체 지향적 설계의 대원칙을 제공한다.
예를 들어 동물원인 상위 모듈과 그 하위 모듈로 사자와 곰이 있다고 하자.
class Zoo(
val lions: List<Lion>,
val bear: List<Bear>,
)
class Bear()
class Lion()
그리고 추후에 코끼리가 동물원 새롭게 들어왔다면, 아래와 같이 수정이 필요하다.
class Zoo(
val lions: List<Lion>,
val bears: List<Bear>,
val elephants: List<Elephant>
)
class Bear()
class Lion()
class Elephant()
즉, 새로운 동물이 추가 될때마다 상위 모듈의 새로운 하위 모듈의 의존성으로 인해 지속적으로 코드를 수정할 필요하가 있고 점점 더 의존성항목이 늘어날것이다.
class Zoo(
val animals: List<Animal>
)
abstract class Animal()
class Bear(): Animal()
class Lion(): Animal()
class Elephant(): Animal()
이렇게 추상클래스 또는 인터페이스를 사용하여 추상적 개념인 animal 클래스를 생성하여 상위 모듈인 동물원은 추상 클래스인 animal에 의존하고 하위 모듈인 곰 사자 코끼리또한 추상 클래스인 animal에 의존한다.