본문 바로가기
DesignPattern

[Design Pattern] template method pattern

by 봄석 2019. 9. 18.

[Design Pattern] template method pattern 

 

template method pattern 이란??

템플릿 메서드 패턴은 

추상 클래스와 구현 클래스로 작성할 수 있으며

메인이 되는 로직 부분은 추상 클래스의 일반 메서드로 선언해서 사용됩니다.

즉 구현 별로 달라질 수 있는 행동(메서드)들은 구현 클래스에서 선언 후 호출하는 방식으로 사용합니다.

 

 

아래와 같은 장단점이 있습니다.

 

장점

  1. 코드 중복 감소
  2. 자식 클래스의 역할을 감소시키면서 핵심 로직 관리 용이
  3. 객체 추가 및 확장 쉽게 가능

단점

  1. 추상 메서드가 너무 많아지면 클래스 관리 복잡
  2. 추상 클래스와 구현 클래스 간 복잡성 증대

예 알아보기 

1.  Template

public abstract class HouseTemplate {

    public final void buildHouse() {
        buildFoundation();
        buildPillars();
        buildWalls();
        buildWindows();
        System.out.println("House is built");
    }

    private void buildWindows() {
        System.out.println("Building Glass Windows");
    }

    public abstract void buildWalls();
    public abstract void buildPillars();

    private void buildFoundation(){
        System.out.println("Building foundation with cement,iron rods and sand");
    }
}

 

2.  concrete class

public class GlassHouse extends HouseTemplate {
    @Override
    public void buildWalls() {
        System.out.println("Building Glass Walls");
    }

    @Override
    public void buildPillars() {
        System.out.println("Building Pillars with glass coating");
    }
}
public class WoodenHouse extends HouseTemplate {
    @Override
    public void buildWalls() {
        System.out.println("Building Wooden Walls");
    }

    @Override
    public void buildPillars() {
        System.out.println("Building Pillars with Wood coating");
    }
}

 

 

3. House Client

public class HousingClient {
    public static void main(String[] args) {
        HouseTemplate houseType = new WoodenHouse();

        houseType.buildHouse();

        System.out.println();
        System.out.println("***********");
        System.out.println();


        houseType = new GlassHouse();
        houseType.buildHouse();
    }
}


소스코드의 중복을 줄이기 위해 하위 클래스에서 빈번하고 공통적으로 나타나는 부분에 대해서 별도의 
추상 클래스를 정의해서 사용하는 것이 핵심입니다.


즉, 클래스 라이브러리 작성 시 공통된 부분을 추출하는 부분에서 이점을 제공하고 이를 통해서 확장을
쉽게 가능하게 해주는 패턴이라고 볼 수 있습니다.

 

 

상위 클래스(여기선 추상 클래스)에게 공통적인 로직은 템플릿 메서드를 두고,

구체 클래스 스타일에 맞게 구현을 강제하기 위해 추상 메서드를 사용하고, Hook메서드(일반 메서드)를

두는 패턴을 템플릿 메서드 패턴(Template Method Pattern)이라고 합니다. 

댓글