//
Search
🏐

템플릿 메소드 패턴

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
복사

3. 참고