템플릿 메서드 (Template Method) 패턴 행동 패턴
알고리즘의 일부 단계를 서브 클래스로 위임하여, 알고리즘의 구조를 변경하지 않고 알고리즘의 특정 단계를 재정의 할 수 있도록 합니다.
|
객체 지향 프로그래밍에서의 클래스는 상속을 통해 메소드를 재정의할 수 있다. 이를 통해 클래스를 상속함으로써 다른 알고리즘을 구현할 수 있는데, 이 알고리즘이 서로 비슷하다 하더라도 다시 재정의 해야만 한다. 이런 클래스의 상속에 대한 한계적인 부분을 템플릿 메서드 패턴을 통해 해결할 수 있다.
템플릿 메서드 (Template Method) 패턴은 알고리즘을 템플릿화 하여, 상위 클래스에서 알고리즘의 뼈대만 정의하고 구체적인 처리는 추상화하여 상속을 통해 구현할 수 있도록 하는 패턴이다. 상위 클래스의 메서드에선 알고리즘의 공통적인 부분을 작성하고 변형이 필요한 부분은 추상화된 메소드를 호출하여 하위 클래스에서 알고리즘에 대한 구현을 위임할 수 있도록 한다.
템플릿 메서드 패턴을 사용하면, 알고리즘의 공통적인 부분은 상위 클래스에서만 정의되므로 코드를 재사용할 수 있게 되고, 상속을 통해 알고리즘의 처리 부분을 유용하게 확장할 수 있게 된다. 또한, 상위 클래스에서는 알고리즘의 구조를 파악할 수 있지만, 실제로 그 알고리즘이 어떻게 처리되는지에 대한 내용은 하위 클래스로 숨길 수 있게 된다. 하지만, 템플릿 메서드 패턴으로 인해 구현해야 할 메서드가 늘어나 클라이언트가 이해하기 어려워질 수 있다.
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 32 33 34 | public class PatternTemplateMethod { public abstract class AbstractClass { public void TemplateMethod() { PrimitiveA(); PrimitiveB(); } protected abstract void PrimitiveA(); protected abstract void PrimitiveB(); } public class SubClass : AbstractClass { protected override void PrimitiveA() { Console.WriteLine("Operate PrimitiveA in SubClass"); } protected override void PrimitiveB() { Console.WriteLine("Operate PrimitiveB in SubClass"); } } public static void Main(string[] args) { AbstractClass abstractClass = new SubClass(); abstractClass.TemplateMethod(); } } | cs |
1 2 3 | Operate PrimitiveA in SubClass Operate PrimitiveB in SubClass Press any key to continue . . . | cs |
'PROGRAMMING > Design Pattern' 카테고리의 다른 글
[GoF] 방문자 (Visitor) 패턴 (0) | 2019.03.09 |
---|---|
[GoF] 중재자 (Mediator) 패턴 (0) | 2019.03.09 |
[GoF] 반복자 (Iterator) 패턴 (0) | 2019.03.09 |
[GoF] 전략 (Strategy) 패턴 (0) | 2019.03.09 |
[GoF] 해석자 (Interpreter) 패턴 (0) | 2019.03.09 |