템플릿 메서드 패턴
템플릿 메서드 패턴은 로직을 단계 별로 나눠야 하는 상황에서 사용된다. 단계 별로 나눈 로직들이 앞으로 수정될 가능성이 있는 경우 더 효율적인 패턴이다.
템플릿 메서드 패턴을 적용시키는 데에는 다음과 같은 조건들이 있다.
- 클래스는 추상 클래스로 만든다.
- 단계를 진행하는 메서드는 수정이 불가능하도록 final 키워드를 추가한다.
- 각 단계들은 자식 클래스만 활용할 수 있도록 protected로 선언한다.
예를 들어 피자를 만들 때는 크게 반죽 -> 토핑 -> 굽기로 이루어져 있다. 이 단계는 항상 유지되며, 일반적으로 순서가 바뀔 일은 없다. 그러면 피자 종류에 따라 토핑만 바꾸면 된다.
abstract class Pizza {
protected void 반죽() { System.out.println("반죽!"); }
abstract void 토핑() {}
protected void 굽기() { System.out.println("굽기!"); }
final void makePizza() { // 상속 받은 클래스에서 수정 불가
this.반죽();
this.토핑();
this.굽기();
}
}
class PotatoPizza extends Pizza {
@Override
void 토핑() {
System.out.println("고구마 넣기!");
}
}
class TomatoPizza extends Pizza {
@Override
void 토핑() {
System.out.println("토마토 넣기!");
}
}
abstract 키워드를 통해 자식 클래스에서는 선택적으로 메서드를 오버라이드 할 수 있게 된다.
Reference
'객체지향' 카테고리의 다른 글
| [객체지향] 디자인 패턴(4) - 어댑터 패턴 (0) | 2022.05.03 |
|---|---|
| [객체지향] 디자인 패턴(3) - 팩토리 메서드 패턴 (0) | 2022.05.02 |
| [객체지향] 디자인 패턴(1) - 싱글톤 패턴 (0) | 2022.04.30 |
| [객체지향] 디자인 패턴 (0) | 2022.04.29 |
| [객체지향] SOLID(5) - DIP(의존관계 역전 원칙) (0) | 2022.03.01 |