본문 바로가기

디자인 패턴

[디자인 패턴] 템플릿 메서드 패턴(Template Method Pattern)

템플릿 메서드 패턴

https://ko.wikipedia.org/wiki/%ED%85%9C%ED%94%8C%EB%A6%BF_%EB%A9%94%EC%86%8C%EB%93%9C_%ED%8C%A8%ED%84%B4

  • 비슷한 종류의 클래스를 하나의 슈퍼클래스를 상속받는 형식으로 구현해 기능을 확장하는 방법
  • 공통된 기능은 슈퍼클래스내에 Hook method로 구현하여 중복 코드를 제거한다.

구현

 

public class Dog {
    public void run(){
        System.out.println("달린다");
    }
    public void bark(){
        System.out.println("멍멍");
    }
}
public class Cat {
    public void run(){
        System.out.println("달린다");
    }
    public void bark(){
        System.out.println("야옹");
    }
}

이 두가지 클래스에서 run 함수는 같은 기능을 하고 있고 bark 부분만 다른 기능을 가진다. 만약 다른 동물이 추가 되더라도 동물 별로 울음소리는 다르지만 run이라는 함수의 기능은 달라지지 않는다. Class가 늘어나면 늘어날수록 중복 코드가 증가 하여 유지보수에 안 좋은 영향을 끼친다. 

public abstract class Animal{
    public void run(){
        System.out.println("달린다");
    }
    public abstract void bark();
}
public class Dog extends Animal{

    public void bark(){
        System.out.println("멍멍");
    }
}
public class Cat extends Animal{
    
    public void bark(){
        System.out.println("야옹");
    }
}

Animal이라는 슈퍼클래스를 생성하여 공통된 부분의 코드의 중복을 줄일 수 있다. Animal의 run template method이자 hook method이다. 여기서 barkprimitive method이다. 

 

템플릿 메서드 패턴 VS 팩토리 메서드 패턴

https://mson-it.tistory.com/10

 

[디자인 패턴] 팩토리 메서드 패턴(Factory Method Pattern)

기존에 프로젝트 DB로 MySQL을 채택한 상황에서 MSSQL을 사용해야 될 때는 어떻게 해야 할까? 확장성을 고려하지 않고 그저 기능 구현에만 집중한 코드를 사용했을 경우 전체적으로 코드를 수정해

mson-it.tistory.com

팩토리 메서드 패턴을 구현할 때 템플릿 메서드 패턴을 사용한다. 하지만 템플릿 메서드 패턴이 중복된 코드를 줄이는 데에 초점을 맞추는 데에 비해 팩토리 메서드 패턴은 객체 생성에 좀 더 초점을 두고 있다. 

장점

  • 중복 코드를 줄일 수 있다.
  • 서브 클래스에서 구현 해야하는 기능을 줄일 수 있다.

단점

  • 클래스간에 관계가 생기고 이를 관리해야 한다.
  • 슈퍼 클래스 생성으로 인한 전체 클래스 수가 늘어난다.