Search

ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ํŒจํ„ด

ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ํŒจํ„ด (Factory Method Pattern)

๊ฐ์ฒด ์ƒ์„ฑ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํŒจํ„ด์œผ๋กœ, ๊ฐ์ฒด ์ƒ์„ฑ์„ ์„œ๋ธŒํด๋ž˜์Šค์— ์œ„์ž„ํ•˜์—ฌ ์œ ์—ฐ์„ฑ์„ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค. ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ๋Š” ๊ฐ์ฒด ์ƒ์„ฑ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๊ณจ๊ฒฉ์„ ์ œ๊ณตํ•˜๊ณ , ๊ตฌ์ฒด์ ์ธ ๊ฐ์ฒด ์ƒ์„ฑ์€ ์ž์‹ ํด๋ž˜์Šค์—์„œ ๋‹ด๋‹นํ•˜์—ฌ ๊ฐ์ฒด ์ƒ์„ฑ์˜ ์บก์Šํ™”๋ฅผ ์‹คํ˜„ํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๋ชฉ์ 

โ€ข
๊ฐ์ฒด ์ƒ์„ฑ ๋กœ์ง์„ ์บก์Šํ™”ํ•˜์—ฌ ์ฝ”๋“œ์˜ ์œ ์—ฐ์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ ํ–ฅ์ƒ
โ€ข
๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ์‚ฌ์šฉ์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถค
โ€ข
ํ™•์žฅ์—๋Š” ์—ด๋ ค์žˆ๊ณ  ์ˆ˜์ •์—๋Š” ๋‹ซํ˜€์žˆ๋Š” OCP ์›์น™ ์ค€์ˆ˜

ํŠน์ง•

โ€ข
์ƒ์„ฑํ•  ๊ฐ์ฒด์˜ ํด๋ž˜์Šค๋ฅผ ์„œ๋ธŒํด๋ž˜์Šค์—์„œ ๊ฒฐ์ •
โ€ข
๊ฐ์ฒด ์ƒ์„ฑ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ์ •์˜
โ€ข
์‹ค์ œ ์ƒ์„ฑ์€ ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ๊ตฌํ˜„
โ€ข
๊ธฐ์กด ์ฝ”๋“œ ์ˆ˜์ • ์—†์ด ์ƒˆ๋กœ์šด ๊ฐ์ฒด ํƒ€์ž… ์ถ”๊ฐ€ ๊ฐ€๋Šฅ

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

// Creator abstract class DialogCreator { abstract Button createButton(); // ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ void render() { Button button = createButton(); button.render(); } } // Concrete Creator class WindowsDialog extends DialogCreator { @Override Button createButton() { return new WindowsButton(); } } // Product interface Button { void render(); } // Concrete Product class WindowsButton implements Button { @Override public void render() { System.out.println("Windows ์Šคํƒ€์ผ ๋ฒ„ํŠผ"); } }
Java
๋ณต์‚ฌ

์ฝ”๋“œ ํ•ด์„ค

์œ„ ์˜ˆ์‹œ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:
โ€ข
DialogCreator (Creator)
โ—ฆ
์ถ”์ƒ ํด๋ž˜์Šค๋กœ, ๋ฒ„ํŠผ ์ƒ์„ฑ์„ ์œ„ํ•œ ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ(createButton)๋ฅผ ์„ ์–ธ
โ—ฆ
render() ๋ฉ”์„œ๋“œ์—์„œ ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒ„ํŠผ์„ ์ƒ์„ฑํ•˜๊ณ  ๋ Œ๋”๋ง
โ€ข
WindowsDialog (Concrete Creator)
โ—ฆ
DialogCreator๋ฅผ ์ƒ์†๋ฐ›์•„ ๊ตฌ์ฒด์ ์ธ ๋ฒ„ํŠผ ์ƒ์„ฑ ๋กœ์ง์„ ๊ตฌํ˜„
โ—ฆ
Windows ์Šคํƒ€์ผ์˜ ๋ฒ„ํŠผ์„ ์ƒ์„ฑํ•˜๋Š” createButton() ๋ฉ”์„œ๋“œ ๊ตฌํ˜„
โ€ข
Button (Product)
โ—ฆ
์ƒ์„ฑ๋  ๋ฒ„ํŠผ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜
โ—ฆ
render() ๋ฉ”์„œ๋“œ๋ฅผ ์„ ์–ธํ•˜์—ฌ ๋ฒ„ํŠผ ๋ Œ๋”๋ง ๋™์ž‘์„ ๋ช…์‹œ
โ€ข
WindowsButton (Concrete Product)
โ—ฆ
Button ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ตฌ์ฒด์ ์ธ ๋ฒ„ํŠผ ํด๋ž˜์Šค
โ—ฆ
Windows ์Šคํƒ€์ผ์— ๋งž๋Š” ๋ฒ„ํŠผ ๋ Œ๋”๋ง ๋กœ์ง ๊ตฌํ˜„
์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๋ฒ„ํŠผ ์Šคํƒ€์ผ(์˜ˆ: MacButton, LinuxButton ๋“ฑ)์„ ์ถ”๊ฐ€ํ•  ๋•Œ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ์‰ฝ๊ฒŒ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.