DesignPattern
[Design Pattern] template method pattern
봄석
2019. 9. 18. 14:01
[Design Pattern] template method pattern
template method pattern 이란??
템플릿 메서드 패턴은
추상 클래스와 구현 클래스로 작성할 수 있으며
메인이 되는 로직 부분은 추상 클래스의 일반 메서드로 선언해서 사용됩니다.
즉 구현 별로 달라질 수 있는 행동(메서드)들은 구현 클래스에서 선언 후 호출하는 방식으로 사용합니다.
아래와 같은 장단점이 있습니다.
장점
- 코드 중복 감소
- 자식 클래스의 역할을 감소시키면서 핵심 로직 관리 용이
- 객체 추가 및 확장 쉽게 가능
단점
- 추상 메서드가 너무 많아지면 클래스 관리 복잡
- 추상 클래스와 구현 클래스 간 복잡성 증대
예 알아보기
1. Template
public abstract class HouseTemplate {
public final void buildHouse() {
buildFoundation();
buildPillars();
buildWalls();
buildWindows();
System.out.println("House is built");
}
private void buildWindows() {
System.out.println("Building Glass Windows");
}
public abstract void buildWalls();
public abstract void buildPillars();
private void buildFoundation(){
System.out.println("Building foundation with cement,iron rods and sand");
}
}
2. concrete class
public class GlassHouse extends HouseTemplate {
@Override
public void buildWalls() {
System.out.println("Building Glass Walls");
}
@Override
public void buildPillars() {
System.out.println("Building Pillars with glass coating");
}
}
public class WoodenHouse extends HouseTemplate {
@Override
public void buildWalls() {
System.out.println("Building Wooden Walls");
}
@Override
public void buildPillars() {
System.out.println("Building Pillars with Wood coating");
}
}
3. House Client
public class HousingClient {
public static void main(String[] args) {
HouseTemplate houseType = new WoodenHouse();
houseType.buildHouse();
System.out.println();
System.out.println("***********");
System.out.println();
houseType = new GlassHouse();
houseType.buildHouse();
}
}
소스코드의 중복을 줄이기 위해 하위 클래스에서 빈번하고 공통적으로 나타나는 부분에 대해서 별도의
추상 클래스를 정의해서 사용하는 것이 핵심입니다.
즉, 클래스 라이브러리 작성 시 공통된 부분을 추출하는 부분에서 이점을 제공하고 이를 통해서 확장을
쉽게 가능하게 해주는 패턴이라고 볼 수 있습니다.
상위 클래스(여기선 추상 클래스)에게 공통적인 로직은 템플릿 메서드를 두고,
구체 클래스 스타일에 맞게 구현을 강제하기 위해 추상 메서드를 사용하고, Hook메서드(일반 메서드)를
두는 패턴을 템플릿 메서드 패턴(Template Method Pattern)이라고 합니다.