Menu

dip 예제

  • Uncategorized

DIP를 이해하기 위해 아래와 같이 이전 장의 예를 들어 보겠습니다. 다음은 종속성 반전 원칙을 위반하는 예입니다. 우리는 높은 수준의 클래스인 관리자 클래스와 Worker라는 낮은 수준의 클래스를 가지고 있습니다. 우리는 새로운 전문 노동자의 고용에 의해 결정 된 회사 구조의 변화를 모델링하기 위해 응용 프로그램에 새로운 모듈을 추가해야합니다. 이를 위해 새로운 클래스 SuperWorker를 만들었습니다. DIP 정의에 따라 상위 수준 모듈은 하위 수준 모듈에 의존해서는 안 됩니다. 둘 다 추상화에 따라 달라 집니다. 먼저 상위 수준 모듈(클래스)과 하위 수준 모듈을 결정합니다. 상위 수준 모듈은 다른 모듈에 의존하는 모듈입니다. 이 예제에서 CustomerBusinessLogic은 DataAccess 클래스에 따라 달라지므로 CustomerBusinessLogic은 상위 수준 모듈이고 DataAccess는 하위 수준 모듈입니다. 따라서 DIP의 첫 번째 규칙에 따라 CustomerBusinessLogic은 구체적인 DataAccess 클래스에 의존해서는 안되며 대신 두 클래스모두 추상화에 의존해야 합니다. 전구를 켜거나 끄는 전기 스위치의 예를 생각해 보십시오. 우리는 두 개의 클래스를 만들어이 요구 사항을 모델링 할 수 있습니다 : 전기 파워 스위치와 전구.

먼저 전구 클래스를 작성해 보겠습니다. 이 예제에서 종속성 반전 원칙을 따르려면 ElectricPowerSwitch 및 전구 클래스가 모두 종속되는 추상화가 필요합니다. 그러나 스위치를 만들기 전에 스위치에 대한 인터페이스를 만들어 보겠습니다. 요약 – 이 자습서에서는 먼저 종속성 반전 원칙을 이해했습니다. 그런 다음 종속성 반전 원칙의 장점과 어댑터 패턴이 이 원칙을 구현하는 데 중요한 역할을 하는 방법을 살펴보았습니다. 마지막으로 Java 스프링 프레임워크의 서비스 계층에서 종속성 반전 원칙을 사용하는 방법을 보여 주었던 Java 예제를 살펴보았습니다. 우리가 쓴 전구와 팬 클래스 모두에서, 우리는 켜고 끄는 에 대한 자신의 기능을 제공하기 위해 전환 가능한 인터페이스를 구현했다. 클래스를 작성하는 동안 패키지로 정렬하는 방법을 놓친 경우 저수준 전기 장치 클래스와 다른 패키지에 Switchable 인터페이스를 유지했습니다. 그러나 가져오기 문을 제외한 코딩 관점에서 는 아무런 차이가 없었지만, 그렇게 함으로써 우리는 로우 레벨 클래스가 추상화에 (역으로) 의존하기를 원합니다. 나중에 다른 응용 프로그램에서 해당 장치에 사용할 수 있는 공용 API로 상위 수준 패키지를 릴리스하기로 결정한 경우에도 도움이 됩니다. 예제를 테스트하려면 이 단위 테스트를 작성해 보겠습니다. 위의 예에서, 우리는 IoC를 달성하기 위해 공장 패턴을 구현했다.

그러나 CustomerBusinessLogic 클래스는 구체적인 DataAccess 클래스를 사용합니다. 따라서 종속 개체 만들기를 팩터리 클래스에 반전시켰음에도 불구하고 여전히 긴밀하게 결합됩니다. 이 원칙에 대해 좋아하는 것은 코드 베이스 전체에서 원칙을 따랐다면 Mocks, Fakes, 테스트 복식 등을 사용하여 각 레이어를 격리하여 테스트 할 수 있다는 것입니다. 다음은 매우 간단한 예입니다. 우리 회사는 위젯을 구축하는 사업에 있습니다. 응용 프로그램을 디자인하는 일환으로 정보를 기록해야한다고 결정했으며 첫 번째 요구 사항은 위젯 목록과 트랜잭션으로 상호 작용할 수 있어야한다는 것입니다. 인터페이스 어셈블리를 만들고 다음과 같은 인터페이스를 추가합니다: 추상화 및 캡슐화는 개체 지향 프로그래밍의 중요한 원칙입니다. 다른 사람에서 많은 다른 정의 가 있지만 위의 예제를 사용 하 여 추상화를 이해 해 봅시다. 종속성 반전 원리를 적용하는 것은 어댑터 패턴의 예로볼 수도 있습니다.

Search