Post
EN

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.