템플릿 메소드 패턴이란?
본 내용은 본인이 지식습득과정에서 연습하기 위한 내용입니다.
보통 클래스를 상속으로 사용하는데 있어서 제어 역전으로 사용합니다.
예를 들면 부모클래스 1개 와 자식클래스 10개 가 있다라고 가정하다면
부모클래스가 수정이 된다면 그 여파는 자식클래스 10개에 전파가 됩니다.
이러한 일을 방지하기 위해서 템플릿 메소드 패턴을 사용합니다.
아래는 이해를 돕기 위한 소스코드 입니다.

<?php /** * Created by naya@coforward.com on 2020/06/01 */ /** * Template Method pattern * */ abstract class Journey { private $thingsToDo = []; final public function takeATrip() { $this->thingsToDo[] = $this->buyAFlight(); $this->thingsToDo[] = $this->takePlane(); $this->thingsToDo[] = $this->enjoyVacation(); $buyGift = $this->buyGift(); if ($buyGift != null) { $this->thingsToDo[] = $buyGift; } $this->thingsToDo[] = $this->takePlane(); } abstract protected function enjoyVacation(): string; protected function buyGift(): ?string { return null; } private function buyAFlight(): string { return 'Journey : 항공권 구매 '; } private function takePlane(): string { return 'Journey : 비행기 타다 '; } public function getThingsToDo(): array { return $this->thingsToDo; } } class BeachJourney extends Journey { protected function enjoyVacation(): string { // TODO: Implement enjoyVacation() method. return "BeachJourney: 수영과 일광욕"; } } class CityJourney extends Journey { protected function enjoyVacation(): string { // TODO: Implement enjoyVacation() method. return "CityJourney : 먹고 마시고 사진 찍고 자기"; } protected function buyGift(): ?string { return "CityJourney : 선물을 산다."; } } $beachJourney = new BeachJourney(); $beachJourney->takeATrip(); $cityJourney = new CityJourney(); $cityJourney->takeATrip(); $a = $beachJourney->getThingsToDo(); $b = $cityJourney->getThingsToDo(); echo '<pre>'; print_r($a); print_r($b); exit; Array ( [0] => Journey : 항공권 구매 [1] => Journey : 비행기 타다 [2] => BeachJourney: 수영과 일광욕 [3] => Journey : 비행기 타다 ) Array ( [0] => Journey : 항공권 구매 [1] => Journey : 비행기 타다 [2] => CityJourney : 먹고 마시고 사진 찍고 자기 [3] => CityJourney : 선물을 산다. [4] => Journey : 비행기 타다 )
"항공권 구매" 와 "비행기 타다" 는
여행을 가기 위해서 필수 조건이라 부모클래스에서 정의 했습니다.
하지만 여행가서 쇼핑하는사람 / 휴식하는사람 / 또다는 무언가를 하는 사람 등등 으로 나눌수가 있습니다.
그리하여 부모 추상클래스에
항공권 구매 : buyAFlight()
비행기 타다 : takePlane()
는 공통으로 두고
abstract protected function enjoyVacation() 메소드를 통해 자식클래스에서 구현하기로 합니다.
또한 선물 구입하는것도 사용자 별로 다르기 때문에
부모클래스에서는 기본 null 값으로 셋팅해주고
실세 구현은 자식클래스에 서 구현해줍니다.
'프로그래밍 > Php' 카테고리의 다른 글
한번 포스팅으로 워드프레스 / 그누보드 / XE / 티스토리 에 동시에 배포 (0) | 2020.07.30 |
---|---|
유머 커뮤니티 크롤링/파싱 시 본문내용이 안나올때 (0) | 2020.07.29 |
고차원 함수 array_map 과 array_reduce 를 이용한 배열을 문자열로 변환 (0) | 2020.05.28 |
array_walk 를 이용한 배열을 쿼리스트링으로 변경 (0) | 2020.05.28 |
[디자인패턴] php 로 알아보는 Builder pattern (0) | 2020.04.24 |