템플릿 메서드 패턴
- 알고리즘 구조를 메서드에 정의하고, 그 일부 단계를 서브 클래스에서 구현할 수 있도록 하는 디자인 패턴
코드예시
- 적용전
package org.example.templateMethodPattern; public class Dog { public void playWithOwner() { System.out.println("귀염둥이 이리온..."); System.out.println("멍!멍!"); System.out.println("꼬리 살랑 살랑~"); System.out.println("잘했어"); } }
package org.example.templateMethodPattern; public class Cat { public void playWithOwner() { System.out.println("귀염둥이 이리온..."); // System.out.println("야옹~ 야옹~"); // System.out.println("꼬리 살랑 살랑~"); System.out.println("잘했어"); } }
- 야옹 ~ 멍멍 ~ 말고는 동일한 소스이다.
- 상속으로 해당 부분을 리팩토링이 가능
- 적용 후
package org.example.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("꼬리 살랑 살랑~"); } }
package org.example.templateMethodPattern; public class Dog extends Animal { @Override void play() { System.out.println("멍!멍!"); } @Override void runSomething() { System.out.println("멍!멍! 꼬리 살랑 살랑~"); } }
package org.example.templateMethodPattern; public class Cat extends Animal { @Override void play() { System.out.println("야옹~ 야옹~"); } @Override void runSomething() { System.out.println("야옹~ 야옹~ 꼬리 살랑 살랑~"); } }
package org.example.templateMethodPattern; public class Driver { public static void main(String[] args) { Animal bolt = new Dog(); Animal kitty = new Cat(); bolt.playWithOwner(); System.out.println(); System.out.println(); kitty.playWithOwner(); } }
- 클래스 다이어그램
- 시퀀스 다이어그램
구성요소 동작 원리
- 템플릿 메서드
- 슈퍼클래스에 위치한 메서드
- 공통된 로직 담당
- 서브 클래스에서 구현되거나 선택적으로 오버라이딩될 수 있는 메서드 호출함
- 추상 메서드
- 템플릿 메서드에서 호출되는 메서드
- 서브 클래스가 반드시 구현해야 하는 메서드
- 훅 메서드
- 템플릿 메서드가 호출되는 메서드
- 서브 클래스가 선택적으로 구현가능
- 오버라이딩 하지 않더라도 기본 로직에 문제가 없어야함
장단점
- 장점
- 코드의 재사용성 증대
- 슈퍼 클래스와 서브 클래스간의 결합도가 낮아짐 → 유지보수성 증대
- DIP 준수 → 객체지향 설계의 강화
- 단점
- 추상 메서드가 많아지면 복잡성 증대
- 슈퍼 클래스의 변경이 서브 클래스에 영향을 미칠 수 있음.
Uploaded by N2T
'자바 > 스프링입문객체지향' 카테고리의 다른 글
[6단원]디자인 패턴 - 템플릿 콜백 패턴(Template Callback Pattern - 견본/회신 패턴) (0) | 2023.09.23 |
---|---|
[6단원]디자인 패턴 - 싱글턴 패턴 (Singleton Pattern) (0) | 2023.09.21 |
[6단원]디자인 패턴 - 개요 (0) | 2023.09.15 |
[6단원]디자인 패턴 - 어댑터 패턴 (0) | 2023.09.15 |
[6단원]디자인 패턴 - 프록시 패턴 (0) | 2023.09.15 |