Abstract Factory Pattern
์ถ์ ํฉํ ๋ฆฌ ํจํด(Abstract Factory Pattern)์ ๊ด๋ จ์ฑ์ด ์๋ ์ฌ๋ฌ ์ข ๋ฅ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ์์ฑ ๋์์ธ ํจํด์ ๋๋ค.
- ์ด ํจํด์ ๊ตฌ์ฒด์ ์ธ ํด๋์ค์ ๋ํ ์ ๋ณด ์์ด๋ ์๋ก ์ฐ๊ด๋๊ฑฐ๋ ์์กด์ ์ธ ๊ฐ์ฒด์ ๊ตฐ์ ์์ฑํ ์ ์๋๋ก ํด์ค๋๋ค. ๋ํ, ํฉํ ๋ฆฌ ์์ฒด๋ฅผ ์ถ์ํํจ์ผ๋ก์จ ๊ฐ์ฒด๋ค์ ์ฝ๊ฒ ์์ฑํ ์ ์์ต๋๋ค.
์ฃผ์ ํน์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ธํฐํ์ด์ค ์ ๊ณต: ์ถ์ ํฉํ ๋ฆฌ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์ด ์ธํฐํ์ด์ค๋ ๊ด๋ จ๋ ๊ฐ์ฒด๋ค์ ์์ฑ์ ์ถ์ํํ๊ณ , ํด๋ผ์ด์ธํธ์๊ฒ๋ ๊ฐ์ฒด์ ๊ตฌ์ฒด์ ์ธ ํด๋์ค์ ๋ํ ์ ๋ณด๋ฅผ ์จ๊น๋๋ค.
- ์๋ก ์ฐ๊ด๋ ๊ฐ์ฒด ์์ฑ: ์ถ์ ํฉํ ๋ฆฌ ํจํด์ ์๋ก ์ฐ๊ด๋ ๊ฐ์ฒด๋ค์ ๊ตฐ์ ์์ฑํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, GUI ๊ตฌ์ฑ ์์๋ฅผ ์์ฑํ๋ ์ถ์ ํฉํ ๋ฆฌ๋ ๋ฒํผ, ํ ์คํธ ์์ ๋ฐ ์ฒดํฌ๋ฐ์ค์ ๊ฐ์ ๊ด๋ จ๋ ๊ฐ์ฒด๋ค์ ์์ฑํ ์ ์์ต๋๋ค.
- ํฉํ ๋ฆฌ ์ถ์ํ: ์ถ์ ํฉํ ๋ฆฌ ํจํด์์๋ ํฉํ ๋ฆฌ ์์ฒด๋ฅผ ์ถ์ํํฉ๋๋ค.
- ์ด๋ ๊ตฌ์ฒด์ ์ธ ํฉํ ๋ฆฌ ํด๋์ค๊ฐ ์๋๋ผ ์ถ์ ํฉํ ๋ฆฌ๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด๋ฅผ ํตํด ํด๋ผ์ด์ธํธ๋ ์ด๋ค ๊ตฌ์ฒด์ ์ธ ํฉํ ๋ฆฌ๊ฐ ์ฌ์ฉ๋๋์ง ์ ํ์ ์์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
- ์ถ์ ํฉํ ๋ฆฌ ํจํด์ ๊ฐ์ฒด ์์ฑ์ ๋ํ ์ ์ฐ์ฑ์ ์ ๊ณตํ๊ณ , ๊ด๋ จ๋ ๊ฐ์ฒด๋ค์ ๊ตฐ์ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ์์ฑํ ์ ์๋๋ก ํด์ค๋๋ค.
- ๋ํ, ํด๋ผ์ด์ธํธ์ ๊ฐ์ฒด ์์ฑ ๋ก์ง์ ๋ถ๋ฆฌํ์ฌ ์์กด์ฑ์ ๋ฎ์ถ๊ณ , ์ฝ๋์ ์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ์ ๋์ ๋๋ค.
์ฅ์
- ์ถ์ํ ์์ค์์ ์ผ๊ด์ฑ: ์ถ์ ํฉํ ๋ฆฌ ํจํด์ ๊ฐ์ฒด ์์ฑ์ ์ถ์ํ ์์ค์ ๋์ฌ, ์์คํ ์ ๋๋จธ์ง ๋ถ๋ถ๊ณผ ์์ฑ ๋ก์ง์ ๋ถ๋ฆฌํฉ๋๋ค.
- ํ์ฅ์ฑ: ์๋ก์ด ์ข ๋ฅ์ ๊ฐ์ฒด๋ฅผ ์์คํ ์ ์ถ๊ฐํ๊ธฐ ์ํด ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ํ์ ์์ด, ์๋ก์ด Concrete Factory๋ฅผ ์ถ๊ฐํจ์ผ๋ก์จ ํ์ฅํ ์ ์์
- ๊ต์ฒด ์ฉ์์ฑ ๋ฐ ์ ์ฐ์ฑ: ํด๋ผ์ด์ธํธ๋ ์คํ ์๊ฐ์ ํ์์ ๋ฐ๋ผ ๋ค๋ฅธ Concrete Factory๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ์์ฑํ๋ ๊ฐ์ฒด ๊ตฐ์ ์ฝ๊ฒ ๊ต์ฒด ๊ฐ๋ฅํฉ๋๋ค.
๋จ์
- ๋ณต์ก์ฑ ์ฆ๊ฐ: ๋ง์ ํด๋์ค์ ์ธํฐํ์ด์ค๊ฐ ๋์ ๋จ์ผ๋ก์จ ์์คํ ์ ์ ๋ฐ์ ์ธ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํ ์ ์์ต๋๋ค.
- ํ์ฅ์ฑ์ ์ ํ: ์ถ์ ํฉํ ๋ฆฌ ์ธํฐํ์ด์ค์ ์๋ก์ด ์ข ๋ฅ์ ์ ํ์ ์ถ๊ฐํ๋ ๊ฒ์ ์ด๋ ต์ต๋๋ค. ์ด๋ ๊ธฐ์กด ํฉํ ๋ฆฌ ํด๋์ค ๋ชจ๋๋ฅผ ๋ณ๊ฒฝํด์ผ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
Example
๋ฒํผ - ๋คํฌ, ๋ผ์ดํธ
class Button:
def click(self):
pass
class DarkButton(Button):
def click(self):
print("dark click")
class LightButton(Button):
def click(self):
print("light click")
์ฒดํฌ๋ฐ์ค - ๋คํฌ, ๋ผ์ดํธ
class CheckBox:
def check(self):
pass
class DarkCheckBox(CheckBox):
def check(self):
print("dark check")
class LightCheckBox(CheckBox):
def check(self):
print("light check")
์คํฌ๋กค - ๋คํฌ, ๋ผ์ดํธ
class ScrollBar:
def scroll(self):
pass
class DarkScrollBar(ScrollBar):
def scroll(self):
print("dark scrollbar")
class LightScrollBar(ScrollBar):
def scroll(self):
print("light scrollbar")
์ ํ ์์ฑ (UI Factory)
class UIFactory:
def getButton(self):
pass
def getScrollBar(self):
pass
def getCheckBox(self):
pass
Dark UI Factory
class DarkUIFactory(UIFactory):
def getButton(self):
return DarkButton()
def getScrollBar(self):
return DarkScrollBar()
def getCheckBox(self):
return DarkCheckBox()
Light UI Factory
class LightUIFactory(UIFactory):
def getButton(self):
return LightButton()
def getScrollBar(self):
return LightScrollBar()
def getCheckBox(self):
return LightCheckBox()
Client
# ์ฌ์ฉ ์์
df = DarkFactory()
bt = df.getButton()
ck = df.getCheck()
sc = df.getScroll()
bt.click()
ck.check()
sc.scroll()
'๐บ๏ธ Design Pattern' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Design Pattern] Builder Pattern - ๋น๋ ํจํด (0) | 2024.05.21 |
---|---|
[Design Pattern] Prototype Pattern - ํ๋กํ ํ์ ํจํด (0) | 2024.05.21 |
[Design Pattern] Factory Method Pattern - ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด (0) | 2024.04.08 |
[Design Pattern] Factory Pattern - ํฉํ ๋ฆฌ ํจํด (0) | 2024.04.08 |
[Design Pattern] Object-Oriented Programming (OOP) (0) | 2024.03.28 |