posted by 방랑군 2012. 1. 19. 01:15

예제를 보면 이해가 빠릅니다.

Template Method 패턴은 상위 클래스에서 특정 동작의 Template만 정의해두고,

구체적인 단계의 동작 방법은 하위 클래스에서 재정의하는 패턴입니다.

 

동일한 동작의 흐름을 갖는 클래스 타입이 여럿 존재할 시 Template Method 패턴을 적용하면

전체 구성이 깔끔해지고 코드가 간결해지는 장점이 있습니다.

 

가상함수를 protected로 선언한 것과 상속받은 클래스에서 Machine 클래스를 어떻게 이용되고 있는지만

눈여겨 보시면 쉽게 이해가 가능합니다.

 

public class Machine
{
    
public void Execute()
    {
        Start();
        Produce();
        Stop();
    }

 

    protected virtual void Start()
    {
        
Trace.WriteLine("Machine.Starting..");
    }

 

    protected virtual void Produce()
    {
        
Trace.WriteLine("Machine.Producing..");
    }

 

    protected virtual void Stop()
    {
        
Trace.WriteLine("Machine.Stopping..");
    }
}


 

    public class PizzaMachine : Machine
    {
        
protected override void Produce()
        {
            
Trace.WriteLine("PizzaMachine.Producing..");
        }
    }


 

다음과 같이 호출하였을 때,


new PizzaMachine().Execute();

 

실제 호출 흐름은 아래와 같이 이루어집니다.

 

1. Machine.Execute() is invoked

2. Machine.Start() is invoked

3. PizzaMachine.Produce() is invoked

4. Machine.Stop() is invoked

 

도식화 하여보면 아래와 같습니다.

PizzaMachine 클래스의 역할이 가벼워진 것을 볼 수 있습니다.

동일한 흐름을 갖는 다양한 Machine들이 추가될 때 따르게 되는 이점은 결코 작지 않습니다.