Design Pattern/Design Pattern
[Pattern] 템플릿 메소드 패턴 ( Template Method Pattern )
NavyGuy
2016. 5. 24. 10:59
템플릿 메소드 패턴
템플릿 메소드 패턴
정 의
하위클래스의 여러 클래스 들이 공통되는 사항을 상위 추상 클래스에서 구현하고, 상세한 기능들은 각 하위 클
래스에서 구현함
사용이유
코드의 중복을 줄이고 효율적인 코드관리가 가능
단 점
상위클래스의 구조(템플릿)에 대한 재사용은 잘 이뤄지지만, 하위 클래스의 상세한 기능들을 재사용하기 어려움
▶ 하위 클래스의 상세한 기능들의 코드를 재사용 불가
기능을 재사용하려면 하위 클래스의 상세한 기능들을 클래스로 따로 지정해야함
해결방안
단일 책임 원칙
한 클래스는 하나의 책임만 가져야 한다
▶ 클래스를 각각 만들어 따로 상세한 기능을 지정하여 재사용
Class Robot
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | package d02; public abstract class Robot { protected String name; // 자식클래스들이 모두 name이라는 상태를 가지니까 // 부모클래스에서 정의 public void fight() { System.out.println(name + "가 전투를 시작합니다"); attack(); move(); attack(); System.out.println(name + "가 전투를 종료합니다"); } public abstract void attack(); public abstract void move(); } // 부모클래스에서 템플릿에 해당하는 메소드(fight)가 정의돼있고 fight내용중 세부 // attack, move하는 기능에 대한 정의는 추상메소드로 남겨둔 채 // 자식클래스에서 세부 attack, move를 구현해서 템플릿을 완성하는 방법 | cs |
Class Transformer extends Robot
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package d02; public class Transformer extends Robot { public Transformer() { name = "트랜스포머"; } public void attack(){ System.out.println("미사일 공격!"); } public void move(){ System.out.println("걸어서 이동!"); } } | cs |
Class TaekwonV extends Robot
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | package d02; public class TaekwonV extends Robot { public TaekwonV(){ name = "태권브이"; } public void attack(){ System.out.println("펀치로 공격!"); } public void move(){ System.out.println("날아서 이동!"); } } | cs |
Class Test
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package d02; public class Test { public static void main(String[] args) { Robot taekwonV = new TaekwonV(); Robot transformer = new Transformer(); taekwonV.fight(); System.out.println("------------------------"); transformer.fight(); } } | cs |