Study/Design Pattern

[Design pattern] 템플렛 메서드 패턴 (Template method pattern)

v명월v 2019. 6. 12. 22:59

안녕하세요. 명월입니다.

 

이 글은 템플렛 메서드 패턴에 대한 설명입니다.

 

템플렛 메서드 패턴은 파사드 패턴과 비슷한 구조입니다. 파사드 패턴은 여러 처리 함수를 하나의 함수에서 구조적으로 전개한 패턴이면 템플렛 메서드 패턴은 단순히 구조적인 패턴이 아닌 추상 클래스를 통해 실행 흐름은 정해진 상태에서 하위 클래스로 그것을 상속받아 재 선언하는 의미의 패턴입니다.

쉽게 말하면 구조적은 파사드 패턴이지만 클래스간 관계적으로 나타난 형식입니다.

abstract class AbstractController
{
  // 추상 클래스에서는 사용하진 않지만 상속받은 클래스에서 override해야한다.
  protected abstract void Init();
  protected abstract String Result();
  // 추상 메서드를 사용한다.
  public void Run()
  {
    Init();
    var ret = Result();
    Console.WriteLine(ret);
  }
}

class Controller : AbstractController
{
  private String data;
  // Run 매소드가 호출되면 사용되는 함수
  protected override void Init()
  {
    this.data = "hello world";
  }
  // Run 메서드가 호출되면 사용되는 함수
  protected override string Result()
  {
    return this.data;
  }
}

class Program
{
  static void Main(string[] args)
  {
    var controller = new Controller();
    // controller에서 Init과 Result는 protected로 되어 있어서 사용할 수 없다.
    // 결과는 hello world
    controller.Run();

    Console.WriteLine("Press any key...");
    Console.ReadKey();
  }
}

템플렛 소스는 매우 간단하면서도 프로그램 설계할 때 템플렛 메서드 패턴을 어떻게 배치하냐 따라 개발의 난이도가 확 바뀝니다. 기본적으로 데코레이션과 파사드를 잘 구상하면 템플렛 메서드 패턴을 잘 응용할 수 있습니다.

 

여기까지 템플렛 메서드 패턴에 대한 설명이었습니다.

 

궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.