728x90
절차지향 설계에서의 중복할인 정책 추가 시, 문제점

- 하나의 DiscountPolicy를 조회하던 로직을 여러 개의 DiscountPolicy를 조회하도록 수정해야 한다.
- calculationDiscountPolicy를 호출 시, 여러 개의 DiscountPolicy를 전달하도록 코드 수정이 필요하다.
- 루프를 돌면서, 할인 정책 타입에 따른 금액을 계산한 뒤, 이 값을 더해 반환해야 한다.
기능을 확장하기 위해 이미 존재하는 코드를 수정해야 한다. 이러한 코드는 여러 개의 문제점을 가진다.
- 수정할 코드를 찾기도 어려우며, 수정할 부분과 상관없는 코드로 변경의 영역이 전파되어, 버그가 발생할 위험이 있다.
- 테스 하기 용이하지 않다.(응집도가 낮아 현재 수정과 상관없는 코드까지 함께 테스트해야 한다)
- 수정한 코드에 대한 개념을 명확하게 표현하지 못한다.(코드를 읽고 이해한 후, 이해한 알고리즘을 기반으로 정책을 이해해야 한다)
객체지향 설계에서의 중복할인 정책 추가
개수를 캡슐화 하게 된다면, 기존 코드를 수정하지 않고도 중복할인 정책을 추가할 수 있다. 기존 설계에서는 메시지(calculateDiscount)를 이해하는 어떤 객체라도 협력이 가능했기 때문에 여러개의 할인 정책을 묶은 객체를 이용해 이 메시지를 전달만 할 수 있다면, 갯수를 캡슐화 할 수 있다.
Composite 디자인 패턴


- 다수의 DiscountPolicy 인스턴스를 포함하는 객체를 추가해서 Movie와 협력할 수 있도록 만든다.(객체의 갯수를 캡슐화)
- 중복 할인 정책(OverlappedDiscountPolicy)은 DiscountPolicy를 상속받아 구현하며, 여러 개의 DiscountPolicy를 받을 수 있도록 List Policies를 필드로 가진다.
- Composite 디자인 패턴을 통해 여러 개의 DiscountPolicy를 묶은 중복 할인 정책(OverlappedDiscountPolicy) 인스턴스가 대표로 메시지를 수신할 수 있기 때문에 DiscountPolicy의 개수를 캡슐화할 수 있다.
객체지향에서는 중복할인이라는 중요한 개념을 앞에 내세우는 것이 가능하며, 그 개념을 클래스로 구현하면 표현적 차이를 줄일 수 있기에 중복할인과 관련된 요구사항이 변경됐을 때 수정할 코드를 찾기도 쉬워진다. 또한 추상화에 의존하도록 코드를 작성하면, 기존 코드를 수정하지 않고도 새로운 클래스를 추가하는 것만으로 새로운 요구사항인 중복할인 정책을 구현하는 것이 가능하다.(개방 폐쇄 원칙)
728x90
'오브젝트' 카테고리의 다른 글
| Ch05. 변경과 설계 - 설계 평가하기 (0) | 2024.10.12 |
|---|---|
| Ch05. 변경과 설계 - 캡슐화 (0) | 2024.10.12 |
| Ch05. 변경과 설계 - 결합도 (0) | 2024.10.12 |
| Ch05. 변경과 설계 - 응집도 (0) | 2024.10.12 |
| Ch05. 변경과 설계 - 변경과 설계 (0) | 2024.10.12 |