용어정리-[#디자인패턴] 5.Template Method Pattern
2018. 6. 1. 20:36ㆍ용어정리/#디자인패턴
[ Template Method Pattern ]
템플릿 메서드 패턴
2018 - 06 - 01
볼트라는 이름의 강아지와 키티라는 이름의 고양이를 키운다고 상상해 보자.
Animal.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | package templateMethodPattern; public abstract class Animal { // 템플릿 메서드 public void playWithOwner() { System.out.println("귀염둥이 이리 온..."); play(); runSomething(); System.out.println("잘했어"); } // 추상 메서드 abstract void play(); // Hook(갈고리) 메서드 void runSomething() { System.out.println("꼬리 살랑 살랑~"); } } | cs |
상위 클래스인 Animal에는 템플릿(견본)을 제공하는 playWithOwner() 메서드와
하위 클래스에게 구현을 강제하는 play() 추상 메서드,
하위 클래스가 선택적으로 오버라이딩할 수 있는 runSomething() 메서드가 있다.
하위 클래스를 포함하는 Dog.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | package templateMethodPattern; public class Dog extends Animal { @Override // 추상 메서드 오버라이딩 void play() { System.out.println("멍! 멍!"); } @Override // Hook(갈고리) 메서드 오버라이딩 void runSomething() { System.out.println("멍! 멍! 꼬리 살랑 살랑"); } } | cs |
하위 클래스를 포함하는 Cat.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | package templateMethodPattern; public class Cat extends Animal { @Override // 추상 메서드 오버라이딩 void play() { System.out.println("야옹~ 야옹~"); } @Override // Hook(갈고리) 메서드 오버라이딩 void runSomething() { System.out.println("야옹~ 야옹~ 꼬리 살랑 살랑"); } } | cs |
하위 클래스인 Dog과 Cat은
상위 클래스인 Animal에서 구현을 강제하고 있는 play() 추상 메서드를 반드시 구현해야 한다.
Driver
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package templateMethodPattern; public class Driver { public static void main(String[] args){ Animal bolt = new log(); Animal kitty = new Cat(); bolt.playWithOwner(); System.out.println(); System.out.println(); kitty.playWithOwner(); } } | cs |
runSomething() 메서드는 선택적으로 오버라이딩 할 수 있다.
이처럼 상위 클래스에 공통 로직을 수행하는 템플릿 메서드와 하위 클래스에 오버라이딩을 강제하는 추상 메서드 또는 선택적으로 오버라이딩 할 수 있는 훅(Hook) 메서드를 두는 패턴을
템플릿 메서드 패턴이라고 한다.
템플릿 메서드를 한 문장으로 정리하면
"상위 클래스의 견본 메서드에서 하위 클래스가 오버라이딩한 메서드를 호출하는 패턴"
출처
스프링 입문을 위한 객체 지향의 원리와 이해
김종민 저
'용어정리 > #디자인패턴' 카테고리의 다른 글
용어정리-[#디자인패턴] 4.Singleton Pattern (0) | 2018.06.01 |
---|---|
용어정리-[#디자인패턴] 3.Decorator Pattern (0) | 2018.06.01 |
용어정리-[#디자인패턴] 2.Proxy Pattern (0) | 2018.06.01 |
용어정리-[#디자인 패턴] 1.Adapter Pattern (0) | 2018.06.01 |