Search

ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ ํŒจํ„ด

ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ ํŒจํ„ด (Template Method Pattern)

์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ณจ๊ฒฉ์„ ์ •์˜ํ•˜๊ณ , ์„ธ๋ถ€ ๊ตฌํ˜„์„ ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ตฌ์กฐ๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ ํŠน์ • ๋‹จ๊ณ„๋ฅผ ์„œ๋ธŒํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์–ด ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๋ชฉ์ 

โ€ข
์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ผˆ๋Œ€๋Š” ์œ ์ง€ํ•˜๋ฉด์„œ ์„ธ๋ถ€ ๊ตฌํ˜„์„ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ
โ€ข
์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ค„์ด๊ณ  ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ ํ–ฅ์ƒ
โ€ข
์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ผ๋ถ€๋ถ„์„ ์„œ๋ธŒํด๋ž˜์Šค์—์„œ ํ™•์žฅ ๊ฐ€๋Šฅ

ํŠน์ง•

โ€ข
์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ณจ๊ฒฉ์„ ์ •์˜
โ€ข
ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํŠน์ • ๋‹จ๊ณ„๋ฅผ ๊ตฌํ˜„
โ€ข
ํ›…(Hook) ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์„ ํƒ์  ํ™•์žฅ ๊ฐ€๋Šฅ
โ€ข
์ „์ฒด์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌ์กฐ ๋ณ€๊ฒฝ ์—†์ด ์„ธ๋ถ€ ๋™์ž‘ ์ˆ˜์ • ๊ฐ€๋Šฅ

์˜ˆ์‹œ ์ฝ”๋“œ

abstract class Beverage { // ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ final void prepareBeverage() { boilWater(); brew(); pourInCup(); if (customerWantsCondiments()) { addCondiments(); } } abstract void brew(); abstract void addCondiments(); void boilWater() { System.out.println("๋ฌผ์„ ๋“์ž…๋‹ˆ๋‹ค"); } void pourInCup() { System.out.println("์ปต์— ๋”ฐ๋ฆ…๋‹ˆ๋‹ค"); } // ํ›…(Hook) ๋ฉ”์„œ๋“œ boolean customerWantsCondiments() { return true; } } class Coffee extends Beverage { void brew() { System.out.println("์ปคํ”ผ๋ฅผ ์šฐ๋ฆฝ๋‹ˆ๋‹ค"); } void addCondiments() { System.out.println("์„คํƒ•๊ณผ ์šฐ์œ ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค"); } }
Java
๋ณต์‚ฌ

์ฝ”๋“œ ์„ค๋ช…

์œ„ ์˜ˆ์‹œ ์ฝ”๋“œ๋Š” ์Œ๋ฃŒ ์ œ์กฐ ๊ณผ์ •์„ ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ ํŒจํ„ด์œผ๋กœ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค:
โ€ข
Beverage ํด๋ž˜์Šค (์ถ”์ƒ ํด๋ž˜์Šค)
โ—ฆ
prepareBeverage(): ์Œ๋ฃŒ ์ œ์กฐ์˜ ์ „์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ •์˜ํ•œ ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ
โ—ฆ
brew(), addCondiments(): ์„œ๋ธŒํด๋ž˜์Šค์—์„œ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ์ถ”์ƒ ๋ฉ”์„œ๋“œ
โ—ฆ
boilWater(), pourInCup(): ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ตฌ์ฒด์ ์ธ ๋ฉ”์„œ๋“œ
โ—ฆ
customerWantsCondiments(): ์„ ํƒ์  ๋™์ž‘์„ ์œ„ํ•œ ํ›… ๋ฉ”์„œ๋“œ
โ€ข
Coffee ํด๋ž˜์Šค (๊ตฌ์ฒด ํด๋ž˜์Šค)
โ—ฆ
brew(): ์ปคํ”ผ ์šฐ๋ฆฌ๋Š” ๊ณผ์ • ๊ตฌํ˜„
โ—ฆ
addCondiments(): ์ฒจ๊ฐ€๋ฌผ ์ถ”๊ฐ€ ๊ณผ์ • ๊ตฌํ˜„
์ด์ฒ˜๋Ÿผ ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด ์ „์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ตฌ์กฐ๋Š” Beverage ํด๋ž˜์Šค์—์„œ ๊ด€๋ฆฌํ•˜๊ณ , ์‹ค์ œ ๊ตฌํ˜„์€ Coffee์™€ ๊ฐ™์€ ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ๋‹ด๋‹นํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ ์ค‘๋ณต์„ ์ค„์ด๊ณ  ์œ ์—ฐํ•œ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.