자바 템플릿 메소드 | 자바 입문강좌 31

자바 템플릿 메소드

템플릿 메소드(template method)는 프로그래밍 작성 시에 반복해서 활용할 수 있는 일종의 틀입니다. 객체지향 프로그램의 디자인 패턴의 하나로 프레임워크 등의 개발 시 유용합니다.

템플릿 메소드를 사용하면 여러개의 복잡한 함수를 하나의 기능에 통합할 수 있습니다.

예제를 통해 알아보겠습니다.

아래의 예제에서는 추상클래스에서 템플릿 메소드를 final 로 만들었습니다.

다형성을 사용하여 sub 클래스를 두개 만들어서 각각 용도에 맞게 오버라이딩 할 수 있는 구조입니다.

package com.kay;

import java.util.ArrayList;

public class Main {

    public static void main(String[] args) {

//        ArrayList 사용
        ArrayList<myTemplate> tmpList = new ArrayList<myTemplate>();

//        각각 사용
        myTemplate tmp1 = new implementedOne();
        myTemplate tmp2 = new implementedTwo();

        System.out.println("[---------- temp-1 -----------]");

        tmp1.run();

        System.out.println("[---------- temp-2 -----------]");
        tmp2.run();

//        ArrayList 사용
        tmpList.add(tmp1);
        tmpList.add(tmp2);

        for(myTemplate mt : tmpList){
            System.out.println("[---------- temp ArrayList -----------]");
            mt.run();
        }
    }
}

abstract class myTemplate{

    public void initializing(){
        System.out.println("Initializing...");
    }
    public void start() {
        System.out.println("Template Start");
    }
    public abstract void doSomething();

    public void end() {
        System.out.println("Template End");
    }
    final public void run(){
        initializing();
        start();
        doSomething();
        end();
    }
}

class implementedOne extends myTemplate{
    @Override
    public void doSomething() {
        System.out.println("*Do Something Implemented - One");
    }
}
class implementedTwo extends myTemplate{
    @Override
    public void doSomething() {
        System.out.println("*Do Something Implemented - Two");
    }
}
[---------- temp-1 -----------]
Initializing...
Template Start
*Do Something Implemented - One
Template End
[---------- temp-2 -----------]
Initializing...
Template Start
*Do Something Implemented - Two
Template End
[---------- temp ArrayList -----------]
Initializing...
Template Start
*Do Something Implemented - One
Template End
[---------- temp ArrayList -----------]
Initializing...
Template Start
*Do Something Implemented - Two
Template End

myTemplate 을 구현한 sub 클래스 두개에서 doSomething 을 오버라이드 합니다. 이 외의 공통된 코드는 추상클래스에서 미리 구현해버립니다.

여기서 템플릿 메소드는 run 입니다. 이런 식으로 사용자는 추상 클래스를 extends 해서 자신이 필요한 doSomething 의 내용만 바꾸면 됩니다.

인스턴스를 생성하면서 myTemplate tmp1 = new implementedOne() 다형성을 활용하고 있습니다. ArrayList를 사용하면 2개의 sub 클래스도 묶어버릴 수 있습니다.

base 클래스만 같으면 다른 sub 클래스들을 하나의 ArrayList로 관리할 수 있습니다. 복잡한 프로그래밍도 인스턴스 관리가 쉬워집니다.

요약

자바 템플릿 메소드는 다양한 방법으로 사용될 수 있습니다.

템플릿 메소드를 실습해보면서 장단점을 파악해보세요.

외부참고문서

Design Patterns: Template Method in Java (refactoring.guru)

Leave a Comment