헤드퍼스트 디자인 패턴 8장 | 알고리즘 캡슐화하기 - 템플릿 메소드 패턴
(에릭 프리먼 외 4인, 서환수 옮김, 한빛미디어)
Coffee 클래스와 Tea 클래스 추상화하기
- 316p
prepareRecipe() 메소드 추상화하기
생각해보면 커피를 필터로 우려내는 일과 티백을 물에 넣어서 홍차를 우려내는 일은 별로 다르지 않습니다. 사실 거의 같다고 볼 수 있죠. 그러니 brew() 메소드를 만들어서 커피를 우려내든 홍차를 우려내든 똑같은 메소드를 씁시다.
이와 마찬가지로 설탕과 우유를 추가하는 일이나 레몬을 추가하는 일이나 그게 그거라고 할 수 있습니다. 음료에 첨가물을 넣는다는 사실 자체는 똑같으니까요 그러니까 addCondiments() 메소드를 양쪽에 사용해도 괜찮습니다.
- 318p
public abstract class CaffeineBeverage {
final void prepareRecipe() {
boilWater();
brew();
pourInCup();
addCondiments();
}
abstract void brew();
abstract void addCondiments();
=> 커피와 티에서 이 두 메소드를 서로 다른 방식으로 처리하므로
추상 메소드로 선언해야 합니다.
이 두 메소드는 서브클래스가 알아서 처리하게 둡시다.
- 319p
prepareRecipe()는 템플릿 메소드입니다. 왜냐고요?
그 이유는 다음과 같습니다.
1. prepareRecipe()도 메소드죠
2. 어떤 알고리즘의 템플릿 역할을 합니다. 여기서는 카페인 음료를 만드는 알고리즘의 템플릿이죠.
- 322p
템플릿 메소드로 새로만든 힙한 CaffeineBeverage
- CaffeineBeverage 클래스에서 작업을 처리합니다. 알고리즘을 독점하죠.
- CaffeienBeverage 덕분에 서브클래스에서 코드를 재사용할 수 있습니다.
- 알고리즘이 한 군데에 모여 있으므로 한 부분만 고치면 됩니다.
- 다른 음료도 쉽게 추가할 수 있는 프레임워크를 제공합니다.
- 일부 구현만 서브클래스에 의존합니다.
- 324p
탬플릿 메소드 패턴은 알고리즘의 골격을 정의합니다. 템플릿 메소드를 사용하면 알고리즘의 일부 단계를 서브 클래스에서 구현할 수 있으며, 알고리즘의 구조는 그대로 유지하면서 알고리즘의 특정 단계를 서브클래스에서 재정의할 수도 있습니다.
- 325p
할리우드 원칙 : 먼저 연락하지 마세요. 저희가 연락 드리겠습니다.
- 332p
후크코드
템플릿 메소드로 정렬하는 방법
'Book' 카테고리의 다른 글
[독서 기록] 헤드퍼스트 디자인 패턴 10장 | 상태 패턴 - 객체의 상태 바꾸기 (0) | 2022.11.15 |
---|---|
[독서 기록] 헤드퍼스트 디자인 패턴 9장 | 컬렉션 잘 관리하기 - 반복자 패턴과 컴포지트 패턴 (0) | 2022.11.15 |
[독서 기록] 헤드퍼스트 디자인 패턴 7장 | 적응시키기 - 어댑터 패턴과 퍼사드 패턴 (0) | 2022.11.15 |
[독서 기록] 헤드퍼스트 디자인 패턴 6장 | 커맨트 패턴 - 호출 캡슐화하기 (0) | 2022.11.15 |
[독서 기록] 헤드퍼스트 디자인 패턴 5장 | 싱글턴 패턴 - 하나뿐인 특별한 객체 만들기 (0) | 2022.11.15 |