오늘도 더 나은 코드를 작성하였습니까?

Dependency Inversion Principle 본문

디자인패턴

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에 의존한다. 

'디자인패턴' 카테고리의 다른 글

Observer pattern(옵저버 패턴)  (0) 2022.07.18
전략패턴(Strategy Pattern)  (0) 2022.07.11
Interface Segregation  (0) 2021.12.28
리스코프 치환법칙(Liskov Substitution)  (0) 2021.12.28
Open-Closed Principle  (0) 2021.12.24