Post

DIP: 의존성 역전 원칙

11. DIP: 의존성 역전 원칙

유연성이 극대화된 시스템이란 소스코드 의존성이 추상(abstract)에 의존하며, 구체(concretion)에 의존하지 않는 시스템

자바와 같은 정적 언어에서는 오직 인터페이스나 추상 클래스 같은 추상적인 선언만 참조해야 한다는 뜻

동적 타입 언어에도 동일한 규칙 적용

소프트웨어 시스템이라면 구체적인 많은 장치에 의존하기 때문에 비현실적 (ex. String)

String 처럼 운영체제나 플랫폼 같이 안정성이 보장된 환경에 대해서는 DIP를 무시하는 편

의존하지 않도록 피하는 것은 변동성이 큰 구체적인 요소

안정된 추상화

인터페이스는 구현체보다 변동성이 낮다.

안정된 소프트웨어 아키텍처란 변동성이 큰 구현체에 의존하는 일을 지양하고, 안정된 추상 인터페이스를 선호하는 아키텍처

  1. 변동성이 큰 구체 클래스를 참조하지 말라
  2. 변동성이 큰 구체 클래스로부터 파생하지 말라.
  3. 구체 함수를 오버라이드 하지 말라
  4. 구체적이며 변동성이 크다면 절대로 그 이름을 언급하지 말라

팩토리

변동성이 큰 구체적인 객체는 특별히 주의해서 생성해야 한다.

자바 등 대다수의 객체지향 언어에서 추상 팩토리 사용

추상 컴포넌트와 구체 컴포넌트 구분

추상 컴포넌트는 애플리케이션의 모든 고수준 업무 규칙 포함

구체 컴포넌트는 업무 규칙을 다루기 위해 필요한 세부사항 포함

제어흐름은 소스 코드 의존성 과는 정반대 -> 의존성 역전

구체 컴포넌트

DIP를 위배하는 클래스들은 적은 수의 구체 컴포넌트 내부로 모을 수 있고, 이를 통해 시스템의 나머지 부분과는 분리할 수 있다.

참조

  1. 클린 아키텍처(Clean Architecture)
This post is licensed under CC BY 4.0 by the author.