Post
KO

DIP : 의존성 역전 원칙

의존성 역전 원칙(DIP)에서 말하는 ‘유연성이 극대화된 시스템’이란 소스 코드 의존성이 추상(abstraction)에 의존하며 구체(concretion)에는 의존하지 않는 시스템이다.

안정성

실제로 뛰어난 소프트웨어 설계자와 아키텍트라면 인터페이스의 변동성을 낮추기 위해 애쓴다. 인터페이스를 변경하지 않고도 구현체에 기능을 추가 할 수 있는 방법을 찾기 위해 노력한다. 이는 소프트웨어 설계의 기본이다.

  • 변동성이 큰 구체 클래스를 참조하지 말라.

  • 이 규칙은 객체 생성 방식을 강하게 제약하며, 일반적으로 추상 팩토리 (Abstract Factory)를 사용하도록 강제한다.

  • 변동성이 큰 구체 클래스로부터 파생하지 말라.

  • 정적 타입 언어에서 상속은 소스 코드에 존재하는 모든 관계 중 가장 강력한 동시에 뻣뻣해서 변경하기 어렵다. 따라서 상속은 아주 신중하게 사용해야 한다.

  • 구체 함수를 오버라이드 하지 말라.

  • 구체적이며 변동성이 크다면 절대로 그 이름을 언급하지 말라.

팩토리(factory)

![](/assets/images/posts/222629504986/125299900129.png?type=w580)

이 곡선은 구체적인 것들로부터 추상적인 것들을 분리한다. 소스 코드 의존성은 해당 곡선과 교체할 때 모두 한 방향, 즉 추상적인 쪽으로 향한다.

제어흐름은 소스 코드 의존성과는 정반대 방향으로 곡선을 가로지른다는 점에 주목하자. 다시 말해 소스 코드 의존성은 제어흐름과는 반대 방향으로 역전된다. 이러한 이유로 이 원칙을 의존성 역전(Dependency Inversion) 이라고 부른다.

구체 컴포넌트

DIP 위배를 모두 없앨 수는 없다.

결론

의존성은 이 곡선을 경계로, 더 추상적인 엔티티가 있는 쪽으로만 향한다. 추후 이 규칙은 의존성 규칙 (Dependency Rule)이라 부를 것이다.

This article is licensed under CC BY 4.0 by the author.