일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- DrawRectangle
- TDD
- 버스 API
- c#
- 시
- WPF
- solid
- Excel Cell Format
- 경기도 버스정보시스템
- MDB Connect
- 디자인 패턴
- delegate
- eventargs
- 경기도 버스
- 객체지향
- sqlite3
- C# MDB Handle
- Winform
- Json.NET
- DrawEllipse
- eventhandler
- MDB Select
- 공공 데이터 포털
- NUnit
- C# 파일 암/복호화
- Cell Border Style
- GDI+
- C# MDB
- MVC
- JSON
Archives
- Today
- Total
White Whale Studio
Template Method Pattern (템플릿 메서드 패턴) 본문
반응형
템플릿 메서드 패턴은
1. 실행 과정을 구현한 상위 클래스
2. 실행 과정의 일부 단계를 구현한 하위 클래스
로 구성됩니다.
1.번의 상위 클래스는 기능 구현 시 필요한 각 단계를 정의하며, 일부는 추상 메서드로 구성됩니다.
이 추상 메서드는 하위클래스에서 구현됩니다.
간단하게 그림으로 살펴보면,
요런 모양이 되겠네요.
정리 해보면,
상위 클래스는 공통기능을 구현한 템플릿 메서드와 하위 클래스에서 개별적으로 기능 구현을 할 수 있도록 규약을 지정하는 추상 메서드로 구성이 됩니다.
하위 클래스는 이 상위 클래스를 상속받아서 공통기능인 템플릿 메서드는 상위 클래스의 흐름을 따르고 하위 클래스에서 개별적으로 작성해야하는 추상 메서드의 실제 구현을 수행하게 되겠네요.
우선 예제로 음료를 만드는 과정으로 해당 패턴을 살펴볼까요~
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 | public abstract class Beverage { // 공통기능은 실 구현 public void boilWater() { Console.WriteLine("물 끓이기"); } // 물끓이기 public void pourInCup() { Console.WriteLine("컵에 따르기"); } // 컵에 물 따르기 // 하위에서 따로 구현해야할 기능은 추상 메서드로 선언하며 추가로 제한자는 // protected를 사용하여 자식클래스 계열에서만 사용 protected abstract void addCondiments(); // 재료 넣기 protected abstract void makeBeverage(); // 음료 만들기 public void PrepareRecipe(string B_Name) { Console.WriteLine("{0} 만들기~!", B_Name); this.boilWater(); this.addCondiments(); // 하위 클래스에서 구현 this.makeBeverage(); // 하위 클래스에서 구현 this.pourInCup(); } } | cs |
위의 코드는 1번의 상위 클래스입니다. 음료를 만들기 위해서 과정을 살펴보면
- 물 끓이기 -> 재료 넣기 -> 음료 만들기 -> 컵에 붓기
과정으로 정리 할 수 있습니다. 만약 커피나 녹차를 만들 경우,
커피의 경우 - 물 끓이기 -> 커피 넣기 -> 커피 만들기 -> 컵에 붓기
녹차의 경우 - 물 끓이기 -> 녹차가루 넣기 -> 녹차 만들기 -> 컵에 붓기
와 같은 과정이 되겠죠
이 중에서 중간 과정인 재료넣기 과정과 만들기 과정은 하위(서브) 클래스에서 추상메서드를 실제로 구현을 하게됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class Coffee : Beverage { protected override void addCondiments() { Console.WriteLine("커피 넣기"); } protected override void makeBeverage() { Console.WriteLine("커피 맛있게 만들기"); } } | cs |
녹차도 동일 과정이라고 보시면 됩니다.
위와 같이 중간 과정을 실제로 구현을 합니다.
1 2 3 4 5 | Beverage cf = new Coffee(); cf.PrepareRecipe("커피"); Beverage gt = new GreenTea(); gt.PrepareRecipe("녹차"); | cs |
이제 호출 할 때는 상위 클래스인 Beverage의 템플릿 메서드인 PrepareRecipe 메서드를 호출하여 결과물을 보면
위와 같이 나옵니다.
이 때 추상 메서드로 선언되어 하위 클래스에서 알맞게 확장할 수 있도록 선언된 메서드를 훅(Hook) 메서드라고 합니다.
해당 패턴은 상위 클래스에서 하위 클래스의 흐름을 제어한다는 특징이 있습니다.
반응형
'IT Engineering > 객체지향&디자인 패턴' 카테고리의 다른 글
[SOLID] 단일책임원칙 / SRP : Single Responsibility Priciple (0) | 2016.06.24 |
---|---|
Facade Pattern (파사드 패턴) (0) | 2016.06.17 |
Decorator Pattern (데코레이터 패턴) (0) | 2016.06.17 |
[객체지향 개발] 캡슐화(Capsulation) (0) | 2016.06.16 |
Strategy Pattern (전략 패턴) (0) | 2016.06.14 |
Comments