반응형
포스코DX 교육을 들으면서 몇몇 디자인 패턴에 대해 소개해주셨다.
하지만 들을 때마다 새롭고 정리가 잘 되지 않아, 오래 기억하기 위해 블로그에 정리를 하고자 한다.
🔍 템플릿 메서드(Template Method) 패턴
▶️ 템플릿 메서드 패턴이란?
템플릿 메소드 패턴이란 여러 클래스에서 공통으로 사용하는 메서드를 상위 클래스(추상 클래스)에서 정의하고, 하위 클래스마다 세부 동작(추상 메서드)을 구현하는 패턴을 말한다.
즉, 상위 클래스로 전체적인 알고리즘의 흐름을 유지하고, 하위 클래스에서 세부적인 사항을 변경해 다양한 상황에 적용할 수 있도록 유연성을 높일 수 있다.
디자인 패턴에서의 템플릿은 변하지 않는 것을 의미한다고 한다.
▶️ 템플릿 메서드 패턴의 장점
- 코드 재사용성 증가: 공통 부분을 상위 클래스에 모아두고, 하위 클래스에서 필요한 부분만 변경하면 되므로 코드의 중복을 줄일 수 있다.
- 유지보수성 향상: 알고리즘의 구조를 명확하게 분리하여 코드를 이해하고 수정하기 쉽다.
- 확장성 증가: 세로운 기능을 추가하거나 기존 기능을 변경할 때, 하위 클래스만 변경하면 된다.
✏️ 예제 코드
다음은 음료를 만드는 클래스에 대한 예제 코드이다.
템플릿 메서드 적용 전
아래와 같이 커피와 차를 만드는 함수를 작성했을 때, 비슷한 로직이 중복되고 있는 것을 확인할 수 있다.
새로운 종류의 차가 추가되면 비슷한 코드를 또 작성해야 한다.
public class CoffeeMaker {
public void makeCoffee() {
boilWater();
grindBeans();
brew();
addSugar();
}
}
public class TeaMaker {
public void makeTea() {
boilWater();
steepTeaLeaves();
addHoney();
}
}
템플릿 메서드 적용 후
아래와 같이 공통적인 부분을 BeverageMaker라는 추상 클래스로 정의하고, CoffeeMaker와 TeaMaker에서 BeverageMaker를 상속받아 추상 메서드의 세부 동작을 구현하면 된다.
public abstract class BeverageMaker {
public final void makeBeverage() { // 알고리즘 뼈대
boilWater();
prepare();
addSweetener();
}
protected abstract void prepare(); // 하위 클래스에서 세부 구현해야 하는 부분
protected abstract void addSweetener(); // 하위 클래스에서 세부 구현해야 하는 부분
private void boilWater() { // 공통 부분
// 물 끓이는 로직
}
}
하단과 같이 BeverageMaker에 정의된 추상 메서드(prepare, addSweetener)를 오버라이딩 하여 각 클래스의 세부 구현 로직에 맞게 정의하면 된다.
public class CoffeeMaker extends BeverageMaker {
@Override
protected void prepare() {
grindBeans();
brew();
}
@Override
protected void addSweetener() {
addSugar();
}
}
public class TeaMaker extends BeverageMaker {
@Override
protected void prepare() {
steepTeaLeaves();
}
@Override
protected void addSweetener() {
addHoney();
}
}
템플릿 메서드 패턴의 핵심 (with. Gemini)
- 추상 클래스: 알고리즘의 뼈대를 정의합니다.
- 추상 메서드: 하위 클래스에서 구현해야 할 부분을 정의합니다.
- 구체적인 클래스: 추상 메서드를 구현하여 특정한 기능을 제공합니다.
끗!
반응형
'디자인 패턴' 카테고리의 다른 글
[디자인 패턴] 팩토리 패턴(3) - 추상 팩토리 (Abstract Factory) 패턴 (1) | 2025.01.13 |
---|---|
[디자인 패턴] 팩토리 패턴(2) - 팩토리 메서드(Factory Method) 패턴 (0) | 2024.12.31 |
[디자인 패턴] 팩토리 패턴(1) - 심플 팩토리(Simple Factory) (0) | 2024.12.20 |