1. 템플릿 메소드 패턴
상속을 통해 슈퍼클래스의 기능을 확장할 때 사용하는 가장 대표적인 방법이다.
변하지 않는 기능은 슈퍼클래스에 만들어두고 자주 변경되며 확장할 기능은 서브클래스에서 만들도록 한다.
슈퍼클래스에서 디폴트 기능을 정의해두거나 비워뒀다가 서브클래스에서 선택적으로 오버라이드할 수 있도록 만둘어둔 메소드를 훅 메소드라고 한다.
public abstract class Super {
public void templateMethod()
{
// 기본 알고리즘 코드
/*
기본 알고리즘 골격을 담은 메소드를 템플릿 메소드라고 부른다.
*/
hookMethod();
abstractMethod();
}
protected void hookMethod() {} //선택적으로 오버라이드 가능한 훅 메소드
public abstract void abstractMethod();
}
Java
복사
2. 실제 예제
신라면 | 너구리 |
1. 물을 끓인다. | 1. 물을 끓인다. |
2. 면을 넣는다. | 2. 면을 넣는다. |
3. 계란을 넣는다. | 3. 콩나물을 넣는다. |
4. 4분 기다린다. | 4. 5분을 기다린다. |
public class ShinRamen {
public void boilWater() {
System.out.println("물을 끓인다.");
}
public void putNoodles() {
System.out.println("면을 넣는다.");
}
public void putEgg() {
System.out.println("계란을 넣는다.");
}
public void waitForMinutes() {
System.out.println("4분 기다린다.");
}
}
Java
복사
public class RaccoonRamen {
public void boilWater() {
System.out.println("물을 끓인다.");
}
public void putNoodles() {
System.out.println("면을 넣는다.");
}
public void putBeanSprouts() {
System.out.println("콩나물을 넣는다.");
}
public void waitForMinutes() {
System.out.println("5분 기다린다.");
}
}
Java
복사
→ 템플릿 메소드 패턴 적용
public abstract class Ramen {
public void makeRamen() {
boilWater();
putNoodles();
putExtra();
waitForMinutes();
}
public void boilWater() {
System.out.println("물을 끓인다.");
}
public void putNoodles() {
System.out.println("면을 넣는다.");
}
public abstract void putExtra();
public abstract void waitForMinutes();
}
Java
복사
public class ShinRamen extends Ramen {
@Override
public void putExtra() {
System.out.println("계란을 넣는다.");
}
@Override
public void waitForMinutes() {
System.out.println("4분 기다린다.");
}
}
Java
복사
public class RaccoonRamen extends Ramen {
@Override
public void putExtra() {
System.out.println("콩나물을 넣는다.");
}
@Override
public void waitForMinutes() {
System.out.println("5분 기다린다.");
}
}
Java
복사