티스토리 뷰

Template Method Pattern - 디자인 패턴

참고서적 : Head First Design Pattern
소스코드 다운로드 : http://www.wickedlysmart.com/headfirstdesignpatterns/code.html
 
패턴 정의 #9 - 템플릿 메소드 (Template Method) Pattern
템플릿 메소드 패턴에서는 메소드에서 알고리즘의 골격을 정의합니다.
알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있습니다.
템플릿 메소드를 이용하면 알고리즘의 구조는 그대로 유지하면서 서브클래스에서 특정 단계를 재정의 할 수 있습니다.
 
알고리즘의 템플릿 즉, 틀을 만들기 위한 패턴입니다.
추상클래스를 만들어 두고, 여기에 templateMethod를 둡니다.
templateMethod에서는 알고리즘에 따라 여러 메소드를 호출하고..
각각의 메소드는 추상클래스에 구현되어 있기도 하고 서브클래스에서 직접 구현해야 하는 것도 있습니다.
 
클래스 다이어그램을 통해서 살펴보도록 하지요~



- AbstractClass에 템플릿 메소드가 들어있습니다.
abstract 메소드로 선언된 단계(메소드)들이 템플릿 메소드에서 활용됩니다.
- ConcreteClass는 여러개가 있을 수 있습니다.
각 클래스에서는 템플릿 메소드에서 요구하는 모든 단계들을 제공해야 합니다.
- 템플릿 메소드에서는 알고리즘을 구현할 때, primitiveOperation1과 primitiveOperation2를 활용합니다.
알고리즘 자체는 이 단계들의 구체적인 구현으로부터 분리되어 있습니다.
- abstract로 선언되었던 단계들은 ConcreteClass에서 구현합니다.
templateMethod()에서는 이런 메소드를 호출해서 작업을 처리합니다.
 
추가적으로 concreteOperation은 추상 클래스내에 구현되어 있는 것입니다. 이것은 서브클래스에서 상속받을 필요가 없습니다.
옵션을 설정하는 등의 경우에 따라 concreteOperation도 상속받아 구현할 필요가 있을 수 있습니다.
그러한 것을 후크(hook)라고 이야기 합니다.
후크를 이용하면 알고리즘의 단계를 옵션에 따라 변경할 수도 있습니다.


디자인 원칙
1. 헐리우드 원칙 - 먼저 연락하지 마세요. 저희가 연락 드리겠습니다.
 
각각의 구성요소들이 언제 어떤식으로 사용되는지를 결정하는 것은 고수준의 구성요소(즉 수퍼 클래스)에서 한다는 의미입니다.
템플릿 메소드 패턴, 팩토리 메소드 패턴, 옵저버 패턴, 커맨드 패턴등이 여기에 따르는 것이 아닐까 합니다.
 
실제로 JAVA API 중 템플릿 메소드 패턴을 사용하는 것은 다음과 같다고 합니다.
 
1. 배열에서의 sort 메소드 (compareTo라는 primitiveOperation 호출)
2. JFrame에서의 paint 메소드 (대표적인 후크 메소드)
3. Applet에서의 init, start, stop, destory, paint 메소드 (역시 후크 메소드..)
 
다음 사항은 유사한 각 패턴의 비교입니다.
 
템플릿 메소드 패턴 - 알고리즘의 일부 단계를 구현하는 것을 서브클래스에서 처리합니다.
스트래티지 패턴 - 바꿔 쓸 수 있는 행동을 캡슐화 하고, 어떤 행동을 사용할 지는 서브클래스에 맡깁니다.
팩토리 메소드 패턴 - 어떤 구상 클래스를 생성할지를 서브 클래스에 결정합니다.
 
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함