Spring 원리(1)(2)정리

suhan cho·2022년 3월 16일
0

전체 흐름 정리

  • 새로운 할인 정책 개발
  • 새로운 할인 정책 적용과 문제점
  • 관심사의 분리
  • AppConfig 리펙터링
  • 새로운 구조와 할인 정책 적용

새로운 할인 적책 적용과 문제점

  • 클라이언트 코드인 주문 서비스 구현체도 함께 변경해야함
  • 인터페이스 뿐만 아니라 구체화에도 의존하여 DIP위반

관심사의 분리

  • 애플리케이션을 공연으로 생각
  • 클라이언트가 의존하는 서버 구현 객체를 직접 생성하고 실행함
  • 비유하자면 기존 남자 주인공 배우가 공연과 초빙을 하는 책임을 갖음
  • 공연 기획자 AppConfig등장
  • AppConfig는 전체 동작 방식을 구성하기 위해 구현 객체 생성하고 연결하는 책임
  • 이제부터는 클라이언트 객체는 자신의 역할을 실행하는 것만 집중, 권한이 줄어듬(책임이 명확해짐)

AppConfig 리팩터링

  • 구성 정보에서 역할과 구현을 명확히 분리
  • 역할이 잘 들어남
  • 중복 제거

새로운 구조와 할인 정책 적용

  • 정률 %할인으로 변경
  • AppConfig등장으로 애플리케이션이 크게 사용영역과 객체를 생성하고 구성하는 영역으로 분리
  • AppConfig가 있는 구성 영역만 변경하면 됨, 사용 영역은 변경할 필요가 없다. 물론 클라이언트 코드인 주문 서비스 코드도 변경하지 않음

좋은 객체 지향 설계의 5가지 원칙의 적용

SRP 단일 책인 원칙

  • 한 클래스는 하나의 책임만 가져야 한다.
  • 클라이언트 객체는 직접 구현 객체를 생성하고, 실행하고, 연결하고, 실행하는 다양한 책임을 가지고 있음
  • SRP단일 책임 원칙을 따르면서 관심사를 분리함
  • 구현 객체를 생성하고 연결하는 책임은 AppConfig가 담당
  • 클라이언트 객체는 실행하는 책임만 담당

DIP의존관계 역전 원칙

  • 프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다. 의존성 주입은 이 원칙을 따르는 방법 중 하나다
  • 클라이언트 코드가 DiscountPolicy 추상화 인터페이스에만 의존하도록 코드 변경
  • 클라이언트 코드는 인터페이스만으로는 아무것도 할 수 없다.
  • AppConfig가 FixDiscountPolicy객체 인스턴스 클라이언트 코드 대신 생성해서 클라이언트 코드에 의존관계를 주입->DIP원칙 따름

OCP

  • 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
  • 다형성 사용하고 클라이언트가 DIP를 지킴
  • 애플리케이션 사용 영역과 구서영역으로 나눔
  • AppConfig가 의존관계를
    FixDiscountPolicy->RateDiscountPolicy로 변경해서 클라이언트 코드에 주입하므로 클라이언트 코드는 변경하지 않아도 됨
  • 소프트웨어 요소를 새롭게 확장해도 사용 영역의 변경은 닫혀 있다.
profile
안녕하세요

0개의 댓글