안녕하세요~! 펄입니다.
드디어! 구체적인 디자인 패턴에 대해서 공부하게 됐어요... 서론이 생각보다 길고 생각보다 중요한 것 같기도...
책에서는 로봇을 예제로 설명을 해준다. 예제는 생략하고 연습문제를 풀면서 뒤쪽에서 설명해보도록 하겠습니다.
5.4 스트래티지 패턴 - Strategy Pattern
전략을 쉽게 바꿀 수 있도록 해주는 디자인 패턴이다. 전략은 일을 수행하는 방식, 비즈니스 규칙, 문제 해결 알고리즘 등으로 이해할 수 있다. 스트래티지 패턴에서는 같은 문제를 해결하는 여러 알고리즘이 클래스별로 캡슐화되어 있고 이들이 필요할 때 교체할 수 있도록 함으로써 동일한 문제를 다른 알고리즘으로 해결할 수 있게 하는 디자인 패턴이다.
Strategy 패턴에서 나타나는 역할이 수행하는 작업
- Strategy : 인터페이스나 추상 클래로 외부에서 동일한 방식으로 알고리즘을 호출하는 방법을 명시한다.
- ConcreteStrategy1, ConcreteStrategy2, ConcreteStrategy3 : 스트래티지 패턴에서 명시한 알고리즘을 실제로 구현한 클래스.
- Context : 스트래티지 패턴을 이용하는 역할 수행. 필요에 따라 구체적인 전략을 바꿀 수 있도록 setter 메서드 제공.
연습문제
1. 어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화해 전체 작업 수행 구조는 바꾸지 않으면서 특정 단계에서 수행하는 작업은 바꾸는 패턴.
2. 스트래티지 패턴의 일반적인 클래스 다이어그램을 작성하라 ↑위에 있음 ㅎ.ㅎ
3. 스트래터지 패턴을 사용. 다음 요구사항 만족하는 코드 작성
. 회원 이름은 이름과 누적 대여 금액을 갖는다.
. 책은 서명, 출판년도, 가격을 갖는다(재고 무한대라 가정)
. 회원 하나의 책을 1권 이상 살수 있다.
. 회원 책 살때마다 누적 금액 저장,
. 가격 정책 따라 책 값 할인, 다른 가격 정책 추가 될 수 있음. -->여길 Strategy로 구현해야겠다.
. 10년이상책 책 자체 할인, 누적 대여 금액이 만원 이상이면 회원할인, 그 외 할인 X
책이랑 매우 흡사합니다만 구현이 조금 다르긴 하네요..ㅎㅎ
6. 영수증 프린터 문제. 실제 영수증 프린터 기기를 연결해 제대로 출력되는지 살펴봐야 한다. 이것은 번거로운 작업인데 이를 해결할 수 있는 방법은?
-- Printer 라는 interface를 하나 구성. Sale 객체 내에 Printer를 가지고 있으며, setPrinter로 외부에서 printer를 set해준다. 간이 테스트를 위해서는 FakePrinter라는 console에 프린트하는 interface를 구현하여 외부에서 set하면서 test를 진행한다. 실제 테스트에서는 HD108ReceiptPrinter를 interface 구현하고 외부에서 set해준다.
연습문제 풀어보니까 디자인패턴을 왜 써야하는지 조금알 것 같네.. 진짜 작은 기능하나하나씩 구현하면 되니까 품이 적게 들어가네요.
소스코드는 여기 있습니다.
https://github.com/dhdnjswnd/JavaObjectiveDesignPattern/tree/main/src/chapter5_strategy
'Java > Java 객체지향 디자인 패턴' 카테고리의 다른 글
[Java 객체 지향 디자인 패턴] 7. 스테이트 패턴 - State Pattern : 상태의 캡슐화 (0) | 2022.03.14 |
---|---|
[Java 객체 지향 디자인 패턴] 6. 싱글턴 패턴 - Singleton Pattern : 단하나! 비동기 시 주의 (0) | 2022.02.23 |
[Java 객체 지향 디자인 패턴] 4. 디자인 패턴 - 바퀴를 다시 발명하지 말라~! (0) | 2022.02.16 |
[Java 객체 지향 디자인 패턴] 3. SOLID 원칙(SRP, OCP, LSP, DIP, ISP) (0) | 2022.02.08 |
[Java 객체 지향 디자인 패턴] 2. 객체지향 원리 (0) | 2022.01.25 |
댓글