디자인패턴

템플릿 메서드 패턴 설명

KayEsQuo 2021. 8. 25. 21:35

개요

  • 사전적 의미
  • 어떠한 상황에서 사용이 되는가
  • 코드설명

 

사전적 의미

템플릿 메소드 패턴(template method pattern)은 소프트웨어 공학에서 동작 상의 알고리즘의 프로그램 뼈대를 정의하는 행위 디자인 패턴이다.[1] 알고리즘의 구조를 변경하지 않고 알고리즘의 특정 단계들을 다시 정의할 수 있게 해준다.

 

템플릿 메소드 패턴 - 위키백과, 우리 모두의 백과사전

템플릿 메소드 패턴(template method pattern)은 소프트웨어 공학에서 동작 상의 알고리즘의 프로그램 뼈대를 정의하는 행위 디자인 패턴이다.[1] 알고리즘의 구조를 변경하지 않고 알고리즘의 특정 단

ko.wikipedia.org

 

 

사용되는 상황

사전적 의미로 보자면 템플릿 메소드 패턴은  알고리즘 구조를 변경하지 않고 사용한다고 되어있다. 

이것은 말로만 보고는 어떠한 상황인지 확인하기가 힘들다. 아래의 그림과 함께 설명을 하면 다음과 같다.

 

 

템플릿 메서드를 사용하기 위해서는 전제조건이 필요하다. 그것은 구체클래스와 상속하는 클래스의 메서드가 같아야 한다. 다시말하면 그림에서 보이는 성호와 승준의 기능이 공통되어 있어야 한다는 점이다. 이것은 같은기능을 가진 객체들을 묶는곳에 유용하다. 위 그림을 예시로 하여 유용한 상황을 설명하자면 다음과같다.

 

성호와 승준은 하루일과(밥먹기, 공부하기, 게임하기)가 공통적이다. 그렇지만 몇시에 밥을 먹고 어떤게임을 하는지는 같을 수도 있고, 다를 수도 있다. 이렇게 다른 일을 하지만 맡은 역할은 같기때문에 템플릿 메서드 패턴을 사용하면 중복 코드양도 줄일수 있으며, 가독성 측면에서도 관리하기 쉬워진다는 측면이 있다.

 

코드

 

public abstract class 일과표 {
    
    protected abstract void 밥먹기();
    protected abstract void 공부하기();
    protected abstract void 게임하기();
    
    public void 하루일과() {
        밥먹기();
        공부하기();
        게임하기();
    }
}
public class 승준 extends 일과표

    @Override
    protected void 밥먹기(){
        System.out.println("랍스타를 먹는다.");
    }

    @Override
    protected void 공부하기() {
        System.out.println("수학공부를 한다.");
    }

    @Override
    protected void 게임하기() {
        System.out.println("바둑을 즐긴다.");
    }

}
public class 성호 extends 일과표

    @Override
    protected void 밥먹기(){
        System.out.println("콩밥을 먹는다.");
    }

    @Override
    protected void 공부하기() {
        System.out.println("게임공부를 한다.");
    }

    @Override
    protected void 게임하기() {
        System.out.println("고무줄 놀이를 즐긴다.");
    }

}
public class Main {
    public static void main(String[] args) {
        AbstractClass abs = new 성호();
        abs.하루일과();
        
        AbstractClass abs = new 승준();
        abs.하루일과();
    }
}

 

 

개개인이 달라도 같은 역할을 하고있는 부분에서 유용한 템플릿 메서드패턴에 대한 정리를 하였다. 

개인적으로 프로젝트할때도 한번씩 쓰이며, 유용한 패턴중 하나라는 생각이 든다.

 

'디자인패턴' 카테고리의 다른 글

프록시 패턴 설명 및 장단점  (0) 2021.08.24