Roel Notebook

[디자인패턴] 템플릿 메소드 패턴

by Roel Downey
728x90
반응형

- 위키 백과 : 템플릿 메소드 패턴 

소프트웨어 공학에서 동작 상의 알고리즘의 프로그램 뼈대를 정의하는 행위 디자인 패턴이다.

알고리즘의 구조를 변경하지 않고 알고리즘의 특정 단계들을 다시 정의할 수 있게 해준다.

 

Defines the skeleton of an algorithm in a method, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithms structure. – GoF Design Patterns

 

상속을 통한 슈퍼클래스의 기능을 확장할 때 사용하는 가장 대표적인 방법이다. 

변하지 않는 기능은 슈퍼클래스에 만들어두고 자주 변경되며 확장할 기능은 서브클래스에서 만들도록 한다.

슈퍼클래스에서는 미리 추상 메소드 또는 오버라이드 가능한 메소드를 정의해두고 이를 활용해 코드의 기본 알고리즘을 담고 있는 템플릿 메소드를 만든다. 

슈퍼클래스에서 디폴트 기능을 정의해두거나 비워뒀다가 서브클래스에서 선택적으로 오버라이드 할 수 있도록 만들어둔 메소드를 훅(hook) 메소드라고 한다. 

서브클래스에서는 추상 메소드를 구현하거나, 훅 메소드를 오버라이드하는 방법을 이용해 기능의 일부를 확장한다.

 

public abstract class Super {
    public void templateMethod() {
    // 기본 알고리즘 코드
    hookMethod();
    abstractMethod();
    ....
    }
    
    protected void hookMethod() { } // 선택적으로 오버라이드 가능한 훅 메소드
    
    public abstract void abstractMethod(); // 서브클래스에서 반드시 구현해야하는 추상 메소드
}

public class Sub1 extends Super {
    protected void hookMethod() {
    
    }
    public void abstractMethod() {
    
    }
}

기본 알고리즘 골격을 담은 메소드를 템플릿 메소드라 부른다.
템플릿 메소드는 서브 클래스에서 오버라이드 하거나 구현할 메소드를 사용한다.

 

 

728x90
반응형

블로그의 정보

What doing?

Roel Downey

활동하기