[Design Pattern] Template Method 패턴



가정에서 요리할 때 필요한 모양틀이 있다. 별모양으로 된 이 틀은 밀가루 반죽을 넣으면 별 모양으로 된 쿠키가 된다. 또한 계란물을 넣으면 별모양 후라이가 되기도 한다.  프로그램을 할 때도 제공된 틀 클래스를 상속 받으면 상속 받은 클래스는 어떠한 것을 구현해도 호출 하는 쪽에서는 수정에 대한 영향도가 없이 다양한 결과를 만들어 낼 수 있다. 이것을 Template Method 패턴이라고 한다.


템플릿 메소드 패턴



가정에서 요리할 때 필요한 틀을 직접 프로그램 해보겠다.

아래 클래스 다이어그램을 보면 AbstractCookShape고정된 요리틀 추상 클래스가 있다. 이것을 상속 받은 CookieShape, EggShape은 틀의 모양을 갖은 쿠키와 계란후라이를 만들어 내는 역할을 한다.


[클래스 다이어그램]



[AbstractCookShape 구현]

재료를 넣고, 요리를 시작, 끝내는 3가지 함수가 있다. 

이 틀에만 맞춰서 구현하면 많은 요리기능을 갖은 클래스를 만들어 낼 수 있다.


public abstract class AbstractCookShape {

public abstract void pourMaterial(String material);

public abstract void startCook();

public abstract void endCook();

}



[CookieShape 구현]

AbstractCookShape을 상속 받아서 쿠키를 요리하는 클래스를 만든다.


public class CookieShape extends AbstractCookShape {

String material = "";

@Override

public void pourMaterial(String material) {

this.material = material;

}


@Override

public void startCook() {

System.out.println("별모양 "+material+"쿠키를 요리 합니다.");

}


@Override

public void endCook() {

System.out.println("별모양 "+material+"쿠키가 완료되었습니다.");

}

}



[EggShape 구현]

AbstractCookShape을 상속 받아서 계란후라이를 요리하는 클래스를 만든다.


public class EggShape extends AbstractCookShape {


String material = "";

@Override

public void pourMaterial(String material) {

this.material = material;

}


@Override

public void startCook() {

System.out.println("별모양 "+material+"후라이를 요리 합니다.");

}


@Override

public void endCook() {

System.out.println("별모양 "+material+"후라이가 완료되었습니다.");

}


}



[Main 구현]

만들어놓은 요리틀을 사용해보자.


public class Main {


public static void main(String[] args) {

AbstractCookShape eggShape = new EggShape();

AbstractCookShape cookieShape = new CookieShape();

eggShape.pourMaterial("계란");

eggShape.startCook();

eggShape.endCook();

cookieShape.pourMaterial("밀가루반죽");

cookieShape.startCook();

cookieShape.endCook();

}

}





반응형

+ Recent posts