๋ฐ์ํ
Facade Pattern
ํผ์ฌ๋ ํจํด(Facade Pattern)์ ๋ณต์กํ ์์คํ ์ด๋ ์๋ธ์์คํ ์ ์ธํฐํ์ด์ค๋ฅผ ๋จ์ํํ๋ ๋์์ธ ํจํด์ ๋๋ค.
- ์ด ํจํด์ ํด๋ผ์ด์ธํธ๊ฐ ์์คํ ์ ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ์์คํ ์ ๋ณต์ก์ฑ์ ๊ฐ์ถ๊ณ , ๋จ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ํผ์ฌ๋ ํจํด์ ๊ฐ์ฒด์งํฅ ์ค๊ณ ์์น ์ค ํ๋์ธ "๋จ์ผ ์ฑ ์ ์์น"(Single Responsibility Principle)์ ๋ฐ๋ฅด๋ฉฐ, ์์คํ ์ ๊ฐ ๊ตฌ์ฑ ์์๋ฅผ ๋ณด๋ค ๋ช ํํ๊ฒ ๋ถ๋ฆฌํฉ๋๋ค.
- Facade Pattern์ด๋ ๊ฑด๋ฌผ์ ์๋ฉด์ฒ๋ผ ๊ทธ ๋ค์ชฝ์ ๋ณต์กํจ์ ๋ด๋ถ์ ์จ๊ธฐ๊ณ ๋จ๋จํ ์ธํฐํ์ด์ค๋ง ์ ๊ณตํฉ๋๋ค.
- ์ฌ๋ฌ๊ฐ์ ์๋ธ์์คํ ์ ํตํฉํ์ฌ ๊ณ ์์ค์ API๋ฅผ ์ ๊ณตํ๋ค๋ ํน์ง์ด ์์ต๋๋ค.
- Client๋ ์ฌ๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํด๋์ค๋ฅผ ํ์๋ก ํ๋ ์ํ์ ๋๋ค.
- ์ด๋ฐ ๊ฒฝ์ฐ, ์ฌ๋ฌ ํด๋์ค๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์กฐํฉํ์ฌ ๋ ๊ฐ๋จํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํด์ฃผ๋ ํด๋์ค๋ฅผ ์๊ฐํด ๋ณผ ์ ์์ต๋๋ค.
Client๋ ๋ณต์กํ ํด๋์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์๋ํ ํ์ ์์ด ๊ฐ๋จํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ Facade Pattern์์ ์ฌ์ฉํด์ ๋ ์ฝ๊ฒ ๊ฐ๋ฐ ํ ์ ์์ต๋๋ค.
Example Facade Pattern
- ์ฐ์ฃผ๋ก์ผ์ ๋ง๋ค๊ธฐ ์ํด์ Stage1, Stage2, Capsule์ด ์์ต๋๋ค.
- ์ฐ์ฃผ์ ์ ์ํ๋ ๋ชฉ์ ์ง๋ก ๋ณด๋ผ๋ ๊น์ง์ ๋ณต์กํ ๊ณผ์ ์ด ํ์ํฉ๋๋ค.
- Stage1: ์ ํ, ์ด๋ฅ, ๋ถ๋ฆฌ. Stage2: ์ ํ, ๋ถ๋ฆฌ. Capsule ์ ํ, ์ฐฉ๋ฅ์ ๊ณผ์ ์ด ํ์ํฉ๋๋ค.
์ด๋ฌํ ๊ณผ์ ์ ๋งค๋ฒ Client๊ฐ ๋ค๋ฃจ๊ธฐ ๋ฒ๊ฑฐ๋กญ๊ธฐ ๋๋ฌธ์ ํ๋๋ก ๋ฌถ์ Facade Pattern์ ๋ง๋ค๋ฉด ๊ฐ๋ฐํ๊ธฐ ์ฝ์ต๋๋ค.
- Stage 1 Class - ์ ํ, ์ด๋ฅ, ๋ถ๋ฆฌ, ๊ทํ
class Stage1:
def ignite(self):
print('1st stage ignition')
def liftOff(self):
print('1st stage liftOff')
def eject(self):
print('1st stage eject')
def comeBack(self):
print('1st stage return')
- Stage 2 Class - ์ ํ, ๋ถ๋ฆฌ
class Stage2:
def ignite(self):
print('2nd stage ignition')
def eject(self):
print('2nd stage eject')
- Capsule Class - ์ ํ, ์ฐฉ๋ฅ
class Capsule:
def ignite(self):
print('capsule ignition')
def landing(self):
print('capsule landing/deploy')
- Rocket Class - ๋ด๋ถ์ Stage1, 2, Capsule ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- ๋ํ ๋ด๋ถ์ ๋ฐ์ฌ Launch ํ๋์ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
class Rocket:
def __init__(self):
self.stage1 = Stage1()
self.stage2 = Stage2()
self.capsule = Capsule()
def launch(self):
self.stage1.ignite()
self.stage1.liftOff()
self.stage1.eject()
self.stage2.ignite()
self.stage1.comeBack()
self.stage2.eject()
self.capsule.ignite()
self.capsule.landing()
- Stage1 Class: ์ ํ, ์ด๋ฅ, ๋ถ๋ฆฌ, ๊ทํ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- Stage2 Class: ์ ํ, ๋ถ๋ฆฌ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- Capsule Class: ์ ํ, ์ฐฉ๋ฅ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- Rocket Class: Stage1, Stage2, Capsule์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, launch ๋ฉ์๋๋ฅผ ํตํด ์ผ๋ จ์ ๋จ๊ณ๋ฅผ ์ํํฉ๋๋ค.
- Client → ์ฌ๋ฌ ๋ถํ์ ์ง์ ํต์ ํ ํ์ ์์ด Rocket Object๋ฅผ ๋ง๋ค์ด์ launch๋ง ํ๋ฉด ๋ฉ๋๋ค.
rocket = Rocket()
rocket.launch()
Facade Pattern์ ์ฌ๋ฌ๊ฐ์ ํด๋์ค๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฌถ์ด์ ๊ฐ๋จํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
Facade์ ์ญํ
- Facade๋ ๋ณต์กํ ๊ฒ์ ๋จ์ํ๊ฒ ๋ณด์ฌ์ค๋๋ค.
- ํต์ฌ์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ฒ ํ๋ ์ผ์
๋๋ค.
- Class & Method๊ฐ ๋ง์ด ๋ณด์ด๋ฉด, ํ๋ก๊ทธ๋๋จธ๋ ๋ฌด์์ ์ฌ์ฉํ๋ฉด ์ข์์ง ๋ง์ค์ด๊ฒ ๋๊ณ , ํธ์ถํ๋ ์์์๋ ์ฃผ์ ํด์ผ๋ง ํฉ๋๋ค
- ์ฆ, ์ฃผ์ํด์ผ ํ๋ค๋ ๊ฒ์ ํ๋ฆฌ๊ธฐ ์ฝ๋ค๋ ๊ฒ์ ๋๋ค.
์ฌ๊ท์ Facade ํจํด์ ์ ์ฉ
- ๊ฐ๋ น, Facade ์ญํ ์ ํ๋ ํด๋์ค์ ์งํฉ์ด ์ฌ๋ฌ ๊ฐ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค.
- ์ด๋ ํด๋์ค์ ์งํฉ์ ์ ๋ฆฌํด์ ์๋ก์ด Facade ์ญํ ์ ๋์ ํ ์ ์์ต๋๋ค.
- ์ฆ, Facade ํจํด์ ์ฌ๊ท์ ์ผ๋ก ์ ์ฉํ๋ ๊ฒ์ ๋๋ค.
- ์๋นํ ํฐ ์์คํ ์ด ๋ค์์ ํด๋์ค, ๋ค์์ ํจํค์ง๋ฅผ ํฌํจํ๊ณ ์์ ๋, ์์์์์ Facade ํจํด์ ์ ์ฉํ๋ฉด ์์คํ ์ ๋ณด๋ค ํธ๋ฆฌํ๊ฒ ๋ฉ๋๋ค.
ํ๋ก๊ทธ๋๋จธ๊ฐ Facade๋ฅผ ๋ง๋ค์ง ์๋ ์ฌ๋ฆฌ์ ์์ธ
- ๋ณต์กํ ํ๋ก๊ทธ๋จ ๋ด๋ถ๋ฅผ ์์งํ๊ณ ์๋ ํ๋ก๊ทธ๋๋จธ๋ Facade ์ญํ ์ ๋ง๋ค๊ณ ์ถ์ดํ์ง ์์ผ๋ฉฐ, ๋ฌด์์์ ์ผ๋ก ํผํ๋ ๊ฒ์ผ ์ ์์ต๋๋ค. ์ ๊ทธ๋ด๊น์?
- ์๋ จ๋ ํ๋ก๊ทธ๋๋จธ์ ๋จธ๋ฆฌ ์์๋ ์์คํ ์ ๋ด์ฉ์ด ๋ชจ๋ ๋ค์ด์๊ณ ๋ง์ ํด๋์ค์ ์ํธ๊ด๊ณ๋ฅผ ์์ ์กํ ๋ฏ ์๊ณ ์๊ธฐ ๋๋ฌธ์ผ์ง๋ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ๋๋ ์์ ์ ๊ธฐ์ ์ ์๋ํ๋ฉฐ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋จธ์๊ฒ '์๋ ์ฒ' ํ๊ณ ์ถ์ ์๋ ์์ต๋๋ค.
- ์ด๋ค ํ๋ก๊ทธ๋๋จธ๊ฐ 'A ํด๋์ค๋ฅผ ํธ์ถํ๊ธฐ์ ์๋ B๋ฅผ ํธ์ถํ๊ณ , B๋ฅผ ํธ์ถํ๊ธฐ ์ ์๋ C์ ๋ฑ๋กํด์ค ํ์๊ฐ ์๋ค'๋ ์์ ๋ง์ ํ๋ค๋ฉด ์ด๋ Facade ํจํด์ ๋์ ํ ํ์๊ฐ ์๋ค๋ ๊ฒ์ ์์ฌํ๊ณ ์์ต๋๋ค.
- ํ์คํ๊ฒ ์ธ์ด๋ก ํํํ ์ ์๋ ๋ ธํ์ฐ๋ ํ๋ก๊ทธ๋๋จธ์ ๋จธ๋ฆฌ ์์ ์จ๊ฒจ๋ ๊ฒ์ด ์๋๋ผ ์ฝ๋๋ก์ ํํํด์ผ ํฉ๋๋ค.
๋ฐ์ํ
'๐บ๏ธ Design Pattern' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Design Pattern] Flyweight Pattern - ํ๋ผ์ด์จ์ดํธ ํจํด (0) | 2024.06.06 |
---|---|
[Design Pattern] Bridge Pattern - ๋ธ๋ฆฟ์ง ํจํด (0) | 2024.06.06 |
[Design Pattern] Decorator Pattern - ๋ฐ์ฝ๋ ์ดํฐ ํจํด (0) | 2024.06.05 |
[Design Pattern] Adapter Pattern - ์ด๋ํฐ ํจํด (0) | 2024.05.27 |
[Design Pattern] Proxy Pattern - ํ๋ก์ ํจํด (0) | 2024.05.27 |