[디자인패턴] 템플릿 메소드 패턴

Coffee Time☕·2021년 6월 6일
0

디자인 패턴

목록 보기
12/13

템플릿 메소드 패턴

프로그램을 작성하다 보면 중복되는 코드가 생긴다. 중복을 줄이기 위해 우리는 템플릿 메소드 패턴을 유용하게 이용 할 수 있다.

템플릿 메소드 패턴은 중복되는 코드를 최소화할 때 이용할 수 있다. 상위 클래스에 중복 부분을 두고 하위 클래스에 수정,변경 될 만한 부분으로 구성한다.

탬플릿 메소드 UML 다이어그램과 특징

abstract 클래스는 공통 부분이 정의되는 클래스이다. Template method와 같은 공통으로 가지는 메소드는 abstract 클래스에서 정의된다.
concrete 클래스에서는 primitive operation 과 같이 달라지는 부분을 상속의 polymorphism으로 처리 할 수 있다.

템플릿 메소트 패턴 예시

피자를 굽는 프로그램을 설계하려고 한다. 피자를 굽기 위해서는 오븐이 필요하고, 피자는 다양한 종류로 확장 될 수 있다.

class oven{
	private ovenstate state;
	public oven(){
		state = ovenstate.ready;  
	}
	
	public void bake(){
		system.out.println("baking");
	}
}

피자 클래스는 추상 클래스로 사용할 오븐을 초기화하는 생성자를 가진다. Makedough와 putinoven 메소드는 모든 피자에게 동일하게 적용되는 단계이므로 template 메소드로 구현을 해준다. 피자의 종류에 따라서 달라지는 ingredients는 하위 클래스에서 정의해준다. 예시의 pepperoni pizza 클래스에서 ingredients에서 정의를 해주었다.
Pizza 클래스의 putinoven에서 ingredients가 호출되는데 polymorphism에 따라서 pepperoni pizza 의 코드가 실행된다.

class pizza{
	private oven o; 
	public pizza(oven o ){
		this.o = o ; 
	}
	public void makedough(){
		system.out.println("making dough");
	}
	public void putinoven(){
		ingredients();
		o.bake();
	}
	
	//primitive operation
	protected void ingredients();
}

class pepperoni_pizza extends pizza{
	public peperoni_pizza(oven o){
		super(o);
	}
	protected void ingredients(){
		system.out.println("pepperoni ingredients ready");
	}
}

0개의 댓글