java study preview 1-2 / DIP

서동희·2023년 10월 13일
0

Dependency Inversion Principle 의존역전원칙

객체 사이에 서로 도움을 주고 받으면 의존관계가 발생한다. DIP는 그러한 의존관계를 맺을 때의 가이드라인에 해당한다.

DIP는 상위 수준의 모듈이 하위 수준의 모듈에 의존하지 말아야 하며, 추상화는 구체적인 것에 의존하면 안 된다는 원칙을 강조합니다. 이를 간단히 말하면, DIP는 의존관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것보다는 변화하기 어려운 것, 거의 변화가 없는 것에 의존하라는 원칙이다.

예를 들어, 자동차 클래스가 엔진 클래스에 의존하지 않고, 추상적인 엔진 인터페이스에 의존하여 엔진의 구체적인 구현을 분리하는 것이 DIP를 따르는 예입니다.

  • 변하기 여러운 것 : 정책, 전략과 같은 큰 흐름이나 개념같은 추상 적인 것
  • 변하기 쉬운 것 : 구체적인 방식, 사물 등과 같은 것

예를 들어보자. 아이가 장난감을 가지고 노는 경우에 어떨 때는 자동차를 어떨 때는 레고를 가지고 놀게 될 것이다. 구체적인 장난감은 변하기 쉬운 것이지만 장난감을 가지고 노는 것은 변하기 어려운 것이다. 아래의 그림은 장난감 클래스에 DIP를 적용한 것이다.

객체지향 관점에서는 이와 같이 변하기 어려운 추상적인 것들을 표현하는 수단으로 추상클래스와 인터페이스가 있다. DIP를 만족하려면 어떤 클래스가 도움을 받을 때 구체적인 클래스보다는 인터페이스나 추상클래스와 의존관계를 맺도록 설계해야한다. DIP를 만족하는 설계는 변화에 유연한 시스템이 된다.

  • 인터페이스, 추상클래스 : 변하지 않는 것
  • 구체적인 클래스 : 변하는 것

DIP를 만족하면 의존성 주입이라는 기술로 변화를 쉽게 수용할 수 있는 코드를 작성할 수 있다.

DI는 DIP를 실현하는 방법 중 하나로, 의존성을 외부에서 주입하여 객체 간의 결합도를 낮춥니다. 이는 객체가 직접 의존 객체를 생성하지 않고 외부에서 의존 객체를 주입받아 사용하도록 하는 것을 의미합니다.

예를 들어, 자동차 클래스가 엔진 객체를 생성하는 대신, 외부에서 엔진 객체를 주입받아 사용하는 것이 DI의 예입니다.

따라서, DIP와 DI를 연결하면 DIP는 의존성의 추상화를 강조하고, DI는 이러한 추상화를 실현하는 방법 중 하나로 의존성을 주입하여 역전시키는데 활용된다고 볼 수 있습니다. DI를 통해 DIP를 실현하여 코드의 유지보수성과 확장성을 개선할 수 있습니다.

profile
백엔드개발자

0개의 댓글