객체지향
[객체지향] 디자인 패턴(2) - 템플릿 메서드 패턴
재담
2022. 5. 1. 00:09
템플릿 메서드 패턴
템플릿 메서드 패턴은 로직을 단계 별로 나눠야 하는 상황에서 사용된다. 단계 별로 나눈 로직들이 앞으로 수정될 가능성이 있는 경우 더 효율적인 패턴이다.
템플릿 메서드 패턴을 적용시키는 데에는 다음과 같은 조건들이 있다.
- 클래스는 추상 클래스로 만든다.
- 단계를 진행하는 메서드는 수정이 불가능하도록 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 키워드를 통해 자식 클래스에서는 선택적으로 메서드를 오버라이드 할 수 있게 된다.