목적
알고리즘의 뼈대를 정의하고, 일부를 서브 클래스로 위임.
알고리즘의 구조를 변경하지 않고 알고리즘의 일부 내용을 서브 클래스에서 재정의 할 수 있도록 함
요소
문제 : 알고리즘들을 캡슐화시키면서 중복되는 코드가 여러 클래스에 존재함
해결 : 알고리즘의 중복되는 부분을 부모 클래스에 캡슐화, 달라지는 부분만 서브 클래스에 구현
결과 : 중복되는 코드를 줄임
정의
추상 클래스에서 고정된 알고리즘 즉, 알고리즘 뼈대를 구현 - templateMethod.
구현체마다 다를 수 있는 primitivOperation은 추상 메소드로 구현
상속받은 Concrete 클래스는 primitiveOperation 메소드를 구현하여 전체 알고리즘을 완성한다.
음료 레시피 구현
"물을 끓인다 (boilWater)"와 "컵에 따른다(pourInCup)"가 공통됨.
두 레시피의 알고리즘을 정리하면 다음과 같다.
템플릿 메소드를 갖는 추상 클래스
Concrete 클래스 - 홍차, 커피
Hook
기본적인 내용만 구현되어 있거나 아무 코드도 들어있지 않은 메소드를 hook라고 함.
서브클래스에서 수정할 수 있도록 한다. -> 알고리즘의 한 부분을 선택적 구현
템플릿 패턴 vs 전략 패턴
템플릿 패턴은 상속을 이용해서 알고리즘의 일부를 다른 클래스에 맡김
전략 패턴은 알고리즘 전체를 위임
+ 팩토리 패턴은 템플릿 패턴의 특화된 버전이기도 함
reference : 상명대학교 조용주 교수님
'컴퓨터과학 > 디자인패턴' 카테고리의 다른 글
[디자인패턴] 컴포짓 패턴 (Composite Pattern) (0) | 2021.12.13 |
---|---|
[디자인패턴] MVC 패턴 (0) | 2021.12.12 |
[디자인패턴] 상태 패턴 (State Pattern) (0) | 2021.12.11 |
[디자인패턴] 커멘드 패턴 (Command Pattern) (0) | 2021.12.06 |
[디자인패턴] 퍼사드 패턴 (Facade Pattern) (0) | 2021.12.05 |
댓글