본문 바로가기
프로그래밍/디자인패턴

Template Method Pattern

by 리뷰하는 (게임)프로그래머_리프TV 2016. 6. 30.

Template Method Pattern 에 대해서 알아보도록 하겠습니다.

 

이 패턴을 설명하면 다음과 같습니다.

 

추상 클래스를 구현하고,

그 클래스를 사용하여 [기능]을 실행합니다.

 

하지만, 그 [기능]구현은 추상 클래스를 상속받은 구현 클래스에서 구현합니다.

 

 

설명만 들으면 아리송 한 관계로 예제를 보도록하겠습니다.

 

namespace TemplatePattern
{
    // 추상 클래스
    public abstract class SportClass
    {
        // 구현 클래스에서 구현하게 될 부분
        public abstract void role();
        // play를 통해 role 사용.
        public void play()
        {
            role();
        }
    }

    // 구현 클래스
    public class BaseBallClass : SportClass
    {
        // role 부분을 새로 구현한다.
        // play를 하게 되면 해당 role이 실행 될 것 입니다.
        public override void role()
        {
            Debug.Log("야구는, 방망이로 공을 맞추는 스포츠");
        }
    }

    // 구현 클래스
    public class SoccerClass : SportClass
    {
        // role 부분을 새로 구현한다.
        // play를 하게 되면 해당 role이 실행 될 것 입니다.
        public override void role()
        {
            Debug.Log("축구는, 발로 공을 골대에 넣는 스포츠");
        }
    }

    public class TemplateClass : MonoBehaviour
    {
        // 각각 자신에 맞는 role을 사용 할 수 있습니다.
        SportClass sportBaseBall = new BaseBallClass();
        SportClass sportSoccer = new SoccerClass();
        
        void Start()
        {
            // 똑같이 play를 하겠지만 role 이 각각 다를 것입니다.
            sportSoccer.play();
            sportBaseBall.play();
        }
    }
}​

 

 

 

코드를 보면, 

SportClass라는 추상 클래스를 만들고,

 

BaseBall Class, Soccer Class가 각각 SportClass를 상속받은 구현 클래스 입니다.

 

기본적으로 어떤 시점에 SportClass에서 Play를 실행시키게 되지만,

 

실제로 사용되는 role(기능) 은 각각의 구현 클래스가 따로 구현을 하게 됩니다.

 

 

UML로 보면 Template Method Pattern은 다음과 같은 형태를 가지게 됩니다.

Method는 새로 구현하지만,

template Method는 Override 하지 않고, 추상클래스가 가지고 있는 그대로를 사용하게 됩니다.

 

책에서는 해당 패턴에 대해서 다음과 같은 팁을 제공하고 있습니다.

1. 로직 공통화(장점)

 - 모든 스포츠는 Play를 할 수 있다.

2. 상위 클래스와 하위 클래스의 연계(약간의 단점)

 - Play를 언제 호출 할지, Play의 내부에서 언제 role을 호출 하는지 구현 클래스를 작업하기 위해서는 알고 있어야 한다. )

3. 하위 클래스를 상위 클래스와 동일시한다.(주의점)

 - 해당 패턴만의 이야기는 아닙니다만, 추상 클래스(스포츠)형 변수에 하위 클래스의 어떤 인스턴스(야구든, 축구든, 또는 다른 새로운 스포츠든...)를 대입해도 제대로 작동할 수 있도록 해야 합니다.

 

 마지막으로, 모든 패턴들은 상위, 하위 클래스들의 조합으로 이루어진 패턴이 대다수 입니다.

해당 부분에 있어, 

상위 클래스에서 대부분을 구현하게 되면, 하위 클래스의 자율성이 떨어지고,

상위 클래스에서 기술을 적게 하면 하위 클래스의 기술이 어렵거나, 중복 처리 해야 하는 부분이 증가할 것 입니다.

 

중요한 것은 상위 클래스에 어떤 것을 두고,

어떤 처리를 하위 클래스에 둘 것인지를 정한 매뉴얼은 없습니다.

그것은 프로그램을 설계하는 사람의 몫이라고 합니다.

 

다음은 Factory Method Pattern에 대해서 알아보도록 하겠습니다.