Search

์ถ”์ƒ ํŒฉํ† ๋ฆฌ ํŒจํ„ด

์ถ”์ƒ ํŒฉํ† ๋ฆฌ ํŒจํ„ด (Abstract Factory Pattern)

๊ด€๋ จ๋œ ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋“ค์˜ ํŒจ๋ฐ€๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ƒ์„ฑ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ์—ฐ๊ด€๋˜๊ฑฐ๋‚˜ ์˜์กด์ ์ธ ๊ฐ์ฒด๋“ค์˜ ๊ทธ๋ฃน์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

์ฃผ์š” ๋ชฉ์ 

โ€ข
์—ฐ๊ด€๋œ ๊ฐ์ฒด๋“ค์˜ ์ผ๊ด€๋œ ์ƒ์„ฑ์„ ๋ณด์žฅ
โ€ข
๊ฐ์ฒด ์ƒ์„ฑ ๋กœ์ง๊ณผ ์‚ฌ์šฉ ๋กœ์ง์˜ ๋ถ„๋ฆฌ
โ€ข
์ œํ’ˆ๊ตฐ ๊ต์ฒด์˜ ์šฉ์ด์„ฑ ์ œ๊ณต

ํŠน์ง•

โ€ข
๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด ์ƒ์„ฑ
โ€ข
๊ด€๋ จ๋œ ๊ฐ์ฒด๋“ค์ด ํ•จ๊ป˜ ๋™์ž‘ํ•˜๋„๋ก ๋ณด์žฅ
โ€ข
์ƒˆ๋กœ์šด ์ œํ’ˆ๊ตฐ ์ถ”๊ฐ€๊ฐ€ ์šฉ์ดํ•จ

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

// Abstract Factory interface GUIFactory { Button createButton(); Checkbox createCheckbox(); } // Concrete Factories class WindowsFactory implements GUIFactory { public Button createButton() { return new WindowsButton(); } public Checkbox createCheckbox() { return new WindowsCheckbox(); } } class MacFactory implements GUIFactory { public Button createButton() { return new MacButton(); } public Checkbox createCheckbox() { return new MacCheckbox(); } }
Java
๋ณต์‚ฌ

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

์œ„ ์ฝ”๋“œ๋Š” ์šด์˜์ฒด์ œ๋ณ„ GUI ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ถ”์ƒ ํŒฉํ† ๋ฆฌ ํŒจํ„ด์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.
โ€ข
GUIFactory ์ธํ„ฐํŽ˜์ด์Šค: ๋ฒ„ํŠผ๊ณผ ์ฒดํฌ๋ฐ•์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
โ€ข
WindowsFactory: Windows ์Šคํƒ€์ผ์˜ GUI ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ํŒฉํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค.
โ—ฆ
WindowsButton๊ณผ WindowsCheckbox ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
โ€ข
MacFactory: Mac ์Šคํƒ€์ผ์˜ GUI ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ํŒฉํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค.
โ—ฆ
MacButton๊ณผ MacCheckbox ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๋Š” ๊ตฌ์ฒด์ ์ธ ํŒฉํ† ๋ฆฌ ํด๋ž˜์Šค๋งŒ ์„ ํƒํ•˜๋ฉด ๋˜๊ณ , ํ•ด๋‹น ์šด์˜์ฒด์ œ์— ๋งž๋Š” ๋ชจ๋“  GUI ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์ผ๊ด€๋˜๊ฒŒ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.