230303 체크포인트

허크·2023년 3월 3일
0

의존성 주입 (BurgerQueen 실전예제)


할인 조건에 적용되는 할인 정책을 변경할 때 고쳐야 하는 코드

  1. 참조변수 선언 및 초기화부
    • 자신이 사용할 객체를 직접 결정하고, 직접 생성하고 있다.
    • 그것을 구체적인 클래스 타입의 참조변수에 할당하고 있다.
  2. 메서드 호출부


문제의 궁극적인 원인은 1에 있다

  • 추상메서드 (Discountpolicy.interface) 생성 및 구현
    • CozDiscountCondition.java 수정 및 생성자 생성
    • Order.java에 할인 조건 입력방식으로 수정
      -> CozDiscountCondition.java와 동일한 문제가 Order.java에서도 발생
  • 추상메서드 (DiscountCondition.interface) 생성 및 구현
    • Order.java에 필드 생성(배열로 생성) 및 생성자 생성
    • for 배열문을 사용하여 배열 필드를 순회, 조건 만족시 finalPrice 적용으로 make order 메서드 수정
    • orderApp.java 에 discountCondition 배열 생성 + 조건 인스턴스 생성
      -> 할인조건을 변경해도 order.java를 수정하지 않아도됨


응집도

  • Order.java는 주문과 관련된 기능만 있어야 바람직 하다
    -> 하지만 할인과 관련된 로직을 지니고 있다
    -> 캡슐화를 위반하고 있다
  • 할인조건을 관장하는 Discount.java 생성
    -> DiscountCondition을 받아올 수 있는 배열 필드 + 생성자 생성
    -> discount 메서드 생성 후 order.java의 할인로직을 삽입 및 필요한 변수 초기화
    • Order.java는 해당 배열정보 제거 및 discount의 정보만 가져오게 수정 + 생성자
  • OrderApp에서 인자관련 오류 발생
    -> 해당 오류부분을 Discount->DiscountCondition->할인조건들로 수정



객체지향 설계 원칙 SOLID

단일 책임 원칙 SRP : 객체한테는 하나의 책임만을 맡겨야한다

  • 변동사항 수정시 OrderApp.java의 일부를 수정해야한다
    -> OrderApp.java가 복수의 책임을 맡고있음

  • AppConfigurer.java로 변동사항 기능 분리
    -> productRepository, menu, cart, discount 생성자 생성
    -> cart와 discount를 입력받는 Order 메서드 생성

  • Main.java에도 AppConfigurer.java에서 입력한 조건을 받아올 수 있게 OrderApp 객체 생성


싱글톤 패턴

  • 해당 단계까지 완료 후 실행시 주문 시점에서 장바구니에 담은 아이템이 안뜸
    -> Order.java의 Cart에 문제가 있음
    -> 타고타고 가다보면 AppConfigurer에서 cart가 중복 실행되고 있음
    (appConfigurer.cart();에서 한번, appConfigurer.order();에서 또 한번)
    -> cart()가 한번만 실행되게 보장되어야함
    -> 싱글톤 패턴 필요

  • 단 한번만 실행될 필드에 cart 객체를 새로 선언해줌
    -> Cart 실행되는 부분에서 새 cart가 실행되는게 아니라 car 객체값만 호출하게됨

profile
codestates seb 44th // 다크모드로 보는걸 추천드립니다

0개의 댓글