템플릿 메소드 패턴(Template Method Pattern)
- 슈퍼클래스에서 템플릿를 정의하고 구체적인 단계는 서브클래스에게 위임하는 패턴
- 사용 방법
- 슈퍼클래스에서 템플릿을 정의하고, 필요한 메소드를 추상 메소드나 구현된 메소드로 선언
- 서브클래스에서 추상 메소드를 구현하거나, 구체적인 메소드를 오버라이딩하여 알고리즘의 일부를 정의
- 슈퍼클래스에서 정의한 템플릿 메소드를 호출하여 알고리즘을 실행
- 장점
- 코드 중복 최소화 : 공통된 부분을 슈퍼클래스에서 구현하여 코드 중복을 방지할 수 있다.
- 확장성 : 서브클래스를 추가하거나 기존 클래스를 수정하지 않고 알고리즘을 확장할 수 있다. → 개방-폐쇄원칙 (OCP) 보장
- 단점
- 너무 많은 서브클래스가 생성되면 클래스 계층 구조가 복잡해질 수 있다.
- 상위 클래스의 로직이 수정되면, 모든 서브 클래스를 수정해야 할 수도 있다.
구현 코드
// 슈퍼클래스: 음료 추상 클래스
abstract class Beverage {
// 템플릿 메소드
public final void prepareBeverage() {
boilWater();
brew();
pourInCup();
addCondiments();
}
// 추상 메소드: 서브클래스에서 구현해야 함
abstract void brew();
abstract void addCondiments();
// 공통 메소드
void boilWater() {
System.out.println("물 끓이기");
}
void pourInCup() {
System.out.println("컵에 따르기");
}
}
// 서브클래스 1: 커피
class Coffee extends Beverage {
@Override
void brew() {
System.out.println("필터로 커피 우리기");
}
@Override
void addCondiments() {
System.out.println("설탕과 우유 추가");
}
}
// 서브클래스 2: 차
class Tea extends Beverage {
@Override
void brew() {
System.out.println("차 봉지를 담그기");
}
@Override
void addCondiments() {
System.out.println("레몬 추가");
}
}
public class TemplateMethodDemo {
public static void main(String[] args) {
Beverage coffee = new Coffee();
coffee.prepareBeverage();
System.out.println("------------------------");
Beverage tea = new Tea();
tea.prepareBeverage();
}
}
[참고] https://gyoogle.dev/blog/design-pattern/Template%20Method%20Pattern.html
'Computer Science > Design Pattern' 카테고리의 다른 글
[Design Pattern] 컴포지트 패턴 (Composite Pattern) (0) | 2023.10.08 |
---|---|
[Design Pattern] 팩토리 메소드 패턴 (Factory Method Pattern) (0) | 2023.09.23 |
[Design Pattern] 싱글톤 패턴 (Singleton Pattern) (0) | 2023.09.23 |
[Design Pattern] 어댑터 패턴 (Adapter Pattern) (0) | 2023.09.22 |
[Design Pattern] SOLID (0) | 2023.09.14 |