티스토리 뷰

Template Method Pattern

1. 개요

base class(추상클래스)에서 메소드 실행 순서를 Template Method 에서 정의하며, 실제 동작하는 알고리즘은 구현클래스에서 정의하도록 클래스를 설계하는 것.

2. 클래스 다이어그램

Template Method  Partern

  • AbstractClass
    tempateMethod 를 가지고 있는 기본 클래스. 프로그램의 큰맥락의 알고리즘이 정의 되어 있으며 구체적인 실행은 하위 클래스에 맡긴다.

  • ConcreteClass
    Abstract Class 를 구현하는 클래스, 추상메소드들을 구현하며 프로그램 흐름과 고려하지 않아도 되면 각 메소드내의 알고리즘만 구현해주면 된다.

3. Java로 구현한 패턴

3.1 클래스 다이어 그램




3.2 소스

[CommonBatchTemplate.java]

package TemplateMethod;

abstract public class CommonBatchTemplate {

    /**
     *  공통적인 비지니스 로직이 포함되는 Template Method.
     */
    public void executeBathcJob() {
        this.setConfig();

        this.connectDb();

        this.printInfo();
        this.runTask();
        this.printResult();

        this.closeDb();
    }


    /**
     *  서브클래스에서 구현해야할 추상메소드
     */
    abstract protected void printInfo();
    abstract protected void runTask();
    abstract protected void printResult();


    /**
     * 환경설정 파일 로드. DB정보, logfile정보 등
     */
    private void setConfig() {
        System.out.println(" called setConfig() ");
    }

    /**
     * Jdbc Connect 작업
     */
    private void connectDb() {
        System.out.println(" called connectDb() ");
    }

    /**
     * Jdbc close
     */
    private void closeDb() {
        System.out.println(" called closeDb() ");
    }

}

[SimpleBatch.java]

package TemplateMethod;

public class SimpleBatch extends CommonBatchTemplate {

    @Override
    protected void printInfo() {
        // TODO Auto-generated method stub
        System.out.println("=== Simple Batch Start! ===");

    }

    @Override
    protected void runTask() {
        // TODO Auto-generated method stub
        /**
         * 실제 작업에 해당하는 내용을 구현
         */
        for( int i=0; i<10; ++i )
            System.out.println( i );

    }

    @Override
    protected void printResult() {
        // TODO Auto-generated method stub
        System.out.println("=== Simple Batch End! ===");

    }


    public static void main(String[] args) {
        // 추상클래스의 Template Method 를 호출해준다.
        new SimpleBatch().executeBathcJob();
    }

}

4. 활용범위

  • 다양하게 변할수 있는 부분을 subclass로 내리고 공통적인 부분을 추상클래스에 정의한다.
  • 코드를 리펙토링 할때 공통적인 알고리즘을 Template Method 및 추상클래스로 모아서 코드의 중복을 줄인다.

5. 마치며

Template Method 패턴을 이용하면 공통적으로 사용되는 코드를 상당부분 줄일 수 있다. 공통라이브러리를 만드는 팀에 있다면 꼭 고려해보도록 하자!

반응형

'Design Pattern' 카테고리의 다른 글

디자인패턴 한줄 정리  (0) 2014.03.31
디자인패턴 4) Prototype Pattern  (0) 2014.03.27
디자인 패턴 3) Builder Pattern  (5) 2014.03.03
디자인패턴 2) Proxy Pattern  (0) 2014.02.10
디자인패턴 1) Singleton 패턴  (3) 2014.02.03
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
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
글 보관함