본문 바로가기
Book

[독서 기록] 헤드퍼스트 디자인 패턴 8장 | 알고리즘 캡슐화하기 - 템플릿 메소드 패턴

by Renechoi 2022. 11. 15.

 

 
헤드 퍼스트 디자인 패턴
이유 1. 흥미로운 이야기와 재치 넘치는 구성이 담긴 〈헤드 퍼스트〉 시리즈! 하나의 패턴에 하나의 이야기를 담았습니다. 틀에 박히지 않아 지루할 틈이 없는 구성과 친구와 이야기하듯 편안한 대화체로 이야기를 풀어냅니다. 이야기 속에 다양한 방법으로 해결할 수 있는 질문과 90개 이상의 연습문제를 담았습니다. 마치 게임 퀘스트를 해결하듯 문제를 하나하나 해결하다 보면 학습한 내용이 머릿속에 강렬하게 남습니다. 이유 2. 원스톱으로 배우는 14가지 GoF 핵심 디자인 패턴과 9가지 객체지향 디자인 원칙! 현장에서 자주 사용되는 옵저버, 어댑터, MVC 패턴 등 14가지 GoF 객체지향 패턴을 중점으로 패턴의 정의, 사용 시기, 사용처, 사용 이유, 즉시 디자인에 적용하는 방법을 알려줍니다. 이와 더불어 객체지향 프로그래밍에 광범위하게 적용할 수 있는 OCP, 할리우드 원칙 등 9가지 객체지향 디자인 원칙과 패턴으로 생각하는 방법도 알려줍니다. 이유 3. 시대의 변화에 맞춘 개정과 한국 독자만을 위한 특별판! 자바 8과 자바 16 이상에서 무리 없이 동작할 수 있도록 예제 코드를 수정했으며, 부가적인 설명과 Q&A 질문을 추가했습니다. 또한 16여 년 만의 개정을 기념해 오직 한국 독자만을 위한 새로운 삽화를 사용하고 한글 친화적인 구성했습니다. 원서를 읽을 때보다 더욱 편안하게 디자인 패턴을 학습할 수 있습니다. ▶ 이 책을 읽어야 하는 당신! ● 소프트웨어 출시는 완벽 그 자체! “어?~ 코드 수정하려고 다시 보니까 난리…” → 유지보수만 생각하면 그저 눈물인 주니어 (자바) 개발자 ● 코딩 실력은 장판파의 장비! “어?~ 팩토리 메소드 패턴을 이렇게 적용했던가?” → 디자인 패턴을 다시 한번 살펴보고 싶은 시니어 (자바) 개발자 ● 혼자 공부해서 다진 프로그래밍 언어 실력! “어?~ 근데 패턴이 뭐야?” → 개발 현장의 소프트웨어 디자인 방법이 궁금한 개발자 지망생
저자
에릭 프리먼, 엘리자베스 롭슨, 케이시 시에라, 버트 베이츠
출판
한빛미디어
출판일
2022.03.16

 

헤드퍼스트 디자인 패턴 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 

 

후크코드

템플릿 메소드로 정렬하는 방법 

 

 

반응형