DESIGN PATTERN

[디자인패턴] 템플릿 메소드 패턴(template Method Pattern) 이란? - 개발자 배찌

개발자 배찌 2022. 4. 15. 13:03
728x90

😀템플릿 메소드 패턴
- 특정 작업을 처리하는 일부분을 서브클래스로 캡슐화하여 전체적인 구조는 바꾸지 않으면서
특정단계에서 수행하는 내용을 바꾸는 패턴
- 객체지향 언어로 개발을 하다 보면 무의식적으로 사용하는 패턴.

😀템플릿 메소드 패턴 장점
- 중복코드를 줄일 수 있다.
- 자식클래스의 역할을 줄여 핵심 로직의 관리가 용이하다.

😀템플릿 메소드 패턴 단점
- 추상메소드가 많아지면서 클래스 관리가 복잡해진다.
- 클래스간의 관계와 코드가 꼬일 염려가 있다.

😀코드로 알아보기!!
Teacher.java

package study.templateMethodPattern.code0;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public abstract class Teacher {
    public void inside(){
        log.info("선생님이 교실에 들어옵니다.");
    };
    public void attendance(){
        log.info("출석을 부릅니다.");
    };

    public abstract void teaching();

    public void outside(){
        log.info("선생님이 교실에서 나갑니다.");
    }

    public void start_class(){
        inside();
        attendance();
        teaching();
        outside();
    }

}


MathTeacher.java

package study.templateMethodPattern.code0;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class MathTeacher extends Teacher{

    @Override
    public void teaching() {
        log.info("선생님이 수학 수업을 합니다.");
    }
}


TemplateMethodPatternTest.java

package study.templateMethodPattern;

import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import study.templateMethodPattern.code0.MathTeacher;
import study.templateMethodPattern.code0.Teacher;

@Slf4j
public class TemplateMethodPatternTest {
    @Test
    void code0test(){
        Teacher mathTeacher = new MathTeacher();
        mathTeacher.start_class();
    }

}


결과화면

선생님이 교실에 들어옵니다.
출석을 부릅니다.
선생님이 수학 수업을 합니다.
선생님이 교실에서 나갑니다.