템플릿 메소드 패턴(Template Method Pattern)

종원유·2021년 11월 24일
0

자바 디자인 패턴 중 빈번하게 사용되는 템플릿 메소드 패턴에 대해서 정리하는 자기 참조용 글이다.

디자인 패턴 : https://velog.io/@yjw8459/Spring-Design-Pattern

템플릿 메소드 패턴(Template Method Pattern)

소스코드의 알고리즘에서 상황에 맞게 확장이나 변경해야할 때, 여러 중복 코드들을 하나로 그룹핑할 때 유용하게 사용될 수 있다.

  • 공통된 로직은 부모 클래스의 일반 메소드로 선언해서 사용하고, 달라질 수 있는 부분은 자식 클래스에서 Override해서 사용한다.

  • 특정한 작업을 수행할 때, 일부분만을 서브 클래스로 캡슐화하여 전체적인 구조를 변경하지 않고 특정 단계에서 수행하는 로직을 변경할 때 사용한다.

public abstract class Super {

    public void templateMethod(){
        hookMethod();		//그룹핑 한 공통 로직
        abstractMethod();	//Super를 상속한 각 객체는 별도의 로직을 구성
    }

    protected void hookMethod() {
        System.out.println("공통 로직");
    }

    public abstract void abstractMethod();

}

public class Sub extends Super{

    @Override
    public void abstractMethod() {
        System.out.println("클래스 별로 다른 로직 구현");
    }

    public static void main(String[] args) {
        Sub sub = new Sub();
        sub.templateMethod();
    }
}

templateMethod()를 작업의 구조라고 생각해보자.
작업 중에서 abstractMethod()부분을 서브 클래스로 캡슐화하여 구조를 변경하지 않고 수정할 때 abstractMethod()를 오버라이드하여 사용한다.
본래 구조를 지키며 일 부분만 별도의 로직을 구성할 수 있다.

  • 템플릿 메소드 패턴을 사용하여 중복되는 공통 로직들은 모두 부모 클래스로 그룹핑한다.
  • 자식 클래스는 각 클래스 별로 달라지는 핵심적인 로직만 구현하여 사용한다.
  • 또한 객체 추가 및 확징이 상속관계로 이루어지기 떄문에 추가 및 확장이 용이하다.

정리

템플릿 메소드 패턴을 사용해서 부모 클래스로 자식 클래스의 공통적인 구조 및 패턴을 만들어준다.
그리고 핵심 비즈니스 로직만 자식 클래스에서 오버라이딩하여 사용한다.
빈번하게 발생하는 중복 코드를 줄일 수 있고, 자식 클래스의 추가 및 확장을 훨씬 쉽게 할 수 있다.

단점

  • 난잡하게 사용할 경우 복잡해질 수 있다.
  • 프로그램 흐름을 읽기 힘들어진다.
  • 객체간의 관계들이 꼬여서 프로그램이 복잡해질 수 있다.
  • 자바는 다중 상속을 지원하지 않으므로, 제한적이다.
    	

즉, 템플릿 메소드 패턴을 사용해서 부모클래스로 자식클래스들의 공통적인 구조 및 패턴을 만들어주고
핵심 비즈니스 로직만 자식 클래스에서 오버라이딩하여 사용한다.
빈번하게 발생하는 중복 코드의 경우는 부모 클래스의 일반 메소드로 선언해서 자식 클래스에서 사용한다.
이런 구조를 가질 경우 자식 클래스의 추가 및 확장을 훨씬 쉽게 할 수 있다.

profile
개발자 호소인

0개의 댓글