๋ฐ์ํ
Mediator Pattern
Mediator ํจํด์ ๊ฐ์ฒด์งํฅ ์ค๊ณ์์ ๊ฐ์ฒด๋ค ๊ฐ์ ์ํธ์์ฉ์ ์ค์ฌํ๋ ์ค์ฌ์(Mediator) ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ค์ด ์ง์ ์ ์ผ๋ก ์๋ก ์ฐธ์กฐํ์ง ์๊ณ ํต์ ํ๋๋ก ๋ง๋๋ ํจํด์ ๋๋ค.
- ์ด๋ฅผ ํตํด ๊ฐ์ฒด๋ค ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ , ์ํธ์์ฉ์ ํ ๊ณณ์ ์ง์ค์์ผ์ ์ฝ๋์ ์ ์ง๋ณด์์ฑ์ ๋์ ๋๋ค.
- ๋ํ ๊ฐ์ฒด๊ฐ์ ๋ณต์กํ ์ํธ์์ฉ์ ์ค์ ์ง์คํํ์ฌ ๊ด๋ฆฌํ ํ์๊ฐ ์๋ ์ํฉ์์ ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- ์ด๋ฅผ ํตํด์ ๊ฐ์ฒด๋ค์ด ์ง์ ํต์ ํ๋ ๋์ Mediator๋ฅผ ํตํด ๊ฐ์ ์ ์ผ๋ก ํต์ ํ๋๋ก ํ์ฌ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ ์ฝ๋์ ์ ์ง ๋ณด์์ฑ์ ๋์ ๋๋ค.
- Mediator๋ ์ค๊ฐ์ธ, ๊ฐ ํ์๋ค์ colleage ์ ๋๋ค.
Diagram of Mediator Pattern
Mediator๋ ์ค๊ฐ์ธ, ๊ฐ ํ์๋ค์ colleage ์ ๋๋ค.
Object๊ฐ์ ์ง์ ์ ์ธ Communication์ด ์๋ ๊ฒฝ์ฐ
- ์์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด A, B, C, D Object๊ฐ ์กด์ฌํฉ๋๋ค.
- A์์ B,C์ Method๋ฅผ ์ง์ ํธ์ถํฉ๋๋ค.
- C์์ B,D์ Method๋ฅผ ์ง์ ํธ์ถํฉ๋๋ค.
์ง์ ์ ์ผ๋ก Object๊ฐ์ Method๋ฅผ ํธ์ถํ๋ฉด ๊ทธ ๊ตฌ์กฐ์ Dependency๊ฐ ๋ณต์กํด ์ง๋๋ค.
๊ทธ๋ฆฌ๊ณ Object์ ํด๋์ค๋ฅผ ๋ค๋ฅธ ๊ณณ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- Mediator Object๋ฅผ ์์ฑํด์ ๋ชจ๋ Communication์ด Mediator๋ฅผ ํตํด์ ์ด๋ฃจ์ด ์ง๊ฒ ํฉ๋๋ค.
Object๊ฐ์ ๋ณต์กํ Dependency๊ฐ ์์ด์ง๊ณ Object๋ค์ ํด๋์ค๋ฅผ ๋ค๋ฅธ ๊ณณ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Mediator Pattern Example
์์) ์ค๋งํธ ํ ์์คํ → ์ค๋งํธ ์๊ณ, ์กฐ๋ช , ์คํผ์ปค ์ฌ์ฉ
- ์ค๋งํธ ์๊ณ๊ฐ ์ธ๋ฆฌ๋ฉด ์ค๋งํธ ์กฐ๋ช
์ด ์ผ์ง๊ณ , ์ค๋งํธ ์คํผ์ปค์์ ๋
ธ๋๊ฐ ๋์ค๊ฒ ์ธํ
ํฉ๋๋ค.
- ์ค๋งํธ ์๊ณ Object์์ ์ค๋งํธ ์กฐ๋ช ๊ณผ ์คํผ์ปค์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ๊ฐ ํจ์๋ฅผ ํธ์ถํด์ผ ํฉ๋๋ค.
- ์ค๋งํธ ์กฐ๋ช
์ ๋๋ฉด ์ค๋งํธ ์คํผ์ปค๋ ๊บผ์ง๊ฒ ์ธํ
ํฉ๋๋ค.
- ์ด๋, ์กฐ๋ช Object ์์๋ ์ค๋งํธ ์คํผ์ปค Object ์ ๋ณด๋ฅผ ๊ฐ๊ณ ์์ด์ผ ํฉ๋๋ค.
Object๊ฐ์ ์ง์ ์ ์ธ Communication์ด ์๋ ๊ฒฝ์ฐ
- ์ด๋ฐ ์์ผ๋ก ์ค๋ธ์ ํธ ๊ฐ์ Dependency๊ฐ ๋ง๋ค์ด ์ง๋ฉด ์ค๋งํธ ์กฐ๋ช ๊ณผ ์ค๋งํธ ์๊ณ๋ง ์ฌ์ฉํ๊ณ ์ถ์๋ ์ค๋ธ์ ํธ ์์ฑ์ ๋ฌธ์ ๊ฐ ์ผ์ด๋ ์ ์์ต๋๋ค.
๋ชจ๋ Communication์ ํ๋์ Object๊ฐ ๋ด๋นํ๋ Mediator Pattern์ ์ ์ฉ์ ํด๊ฒฐ ๊ฐ๋ฅํฉ๋๋ค.
Example ์์ ๋ฑ์ฅ ํด๋์ค
- Mediator: Notify() ์๊ทธ๋์ ๋ฐ์์ ์ฒ๋ฆฌํด ์ฃผ๋ ํจ์ ์ ๋๋ค.
- HomeMedia
- Mediator๋ฅผ ์์ ๋ฐ์ต๋๋ค.
- Notify()๋ก ๋ค์ด์ค๋ ์๊ทธ๋์ ๋ถ๋ฐฐํ๊ธฐ ์ํด์ clock, light, speaker reference๋ฅผ ์์ ํฉ๋๋ค.
- Clock, Light, Speaker
- ๋ด๋ถ์ Mediator๋ฅผ ํตํด ์๊ทธ๋์ ๋ณด๋ด๊ธฐ ๋๋ฌธ์ Mediator reference ๊ฐ๊ณ ์์ต๋๋ค.
class Mediator:
def notify(self, signal: str):
pass
- Mediator class - Notify()
- ์๊ทธ๋์ ๋ฐ์์ ์ฒ๋ฆฌํด์ฃผ๋ ํจ์์ ๋๋ค.
- argument๋ก string ํ์ ์ signal ์ด ์กด์ฌํฉ๋๋ค.
class Clock:
def setMediator(self, mediator: Mediator):
self.mediator = mediator
def Alarm(self):
print("alarm on")
self.mediator.notify('AlarmOn')
class Light:
def setMediator(self, mediator: Mediator):
self.mediator = mediator
def On(self):
print("light On")
def Off(self):
print("light off")
self.mediator.notify('LightOff')
class Speaker:
def setMediator(self, mediator: Mediator):
self.mediator = mediator
def On(self):
print("speaker on")
def Off(self):
print("speaker off")
Clock class
- setMediator(): Mediator๋ฅผ ์ค์ ํ๋ ํจ์์ ๋ใ .
- Alarm()
- “alarm on”๋ฉ์์ง ์ถ๋ ฅํ, Mediator์ “AlarmOn” signal ์ ๋ฌํฉ๋๋ค.
Light, Speaker class
- setMediator(): Mediator๋ฅผ ์ค์ ํ๋ ํจ์์ ๋๋ค.
- On()
- ๊ฐ๊ฐ Light์ Speaker๊ฐ ์ผ์ก๋ค๋ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
- Off()
- ๊ฐ๊ฐ Light์ Speaker๋ฅผ ๊ป๋ค๋ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
- Light๋ Mediator์ “LightOff” signal์ ์ ๋ฌํฉ๋๋ค.
class HomeMedia(Mediator):
def __init__(self, clock, light, speaker):
self.clock = clock
self.light = light
self.speaker = speaker
def notify(self, signal: str):
if signal == 'AlarmOn':
self.speaker.On()
self.light.On()
elif signal == 'LightOff':
self.speaker.Off()
HomeMediator ํด๋์ค
- ์ญํ : Mediator๋ฅผ ์์๋ฐ์ต๋๋ค.
- ์์ฑ์ (Constructor): clock, light, speaker ๋ ํผ๋ฐ์ค๋ฅผ ๋ฐ์ต๋๋ค.
notify ๋ฉ์๋
- ์ญํ : ์ค๋งํธ ํ ์์คํ ์์ ๋ชจ๋ ์์คํ ์ ์ค์ฌํ๋ ํจ์์ ๋๋ค.
- ์๊ทธ๋: 'AlarmOn' ๋๋ 'LightOff'์ผ ๋์ ํ๋์ ์ ์ํฉ๋๋ค.
- Signal์ด 'AlarmOn'์ธ ๊ฒฝ์ฐ:
- speaker๋ฅผ ์ผญ๋๋ค.
- light๋ฅผ ์ผญ๋๋ค.
- ์ค๋งํธ ์๊ณ๊ฐ ์ธ๋ฆฌ๋ฉด ์ค๋งํธ ์กฐ๋ช ์ด ์ผ์ง๊ณ ์ค๋งํธ ์คํผ์ปค์์ ๋ ธ๋๊ฐ ๋์ค๊ฒ ์ค์ ํฉ๋๋ค.
- Signal์ด 'LightOff'์ธ ๊ฒฝ์ฐ:
- speaker๋ฅผ ๋๋๋ค.
- ์ค๋งํธ ์กฐ๋ช ์ ๋๋ฉด ์ค๋งํธ ์คํผ์ปค ๋ํ ๊บผ์ง๊ฒ ์ค์ ํฉ๋๋ค.
- Signal์ด 'AlarmOn'์ธ ๊ฒฝ์ฐ:
- Clock, Light, Speaker ๊ฐ๊ฐ์ Object๋ฅผ ์์ฑํฉ๋๋ค.
clock = Clock()
light = Light()
speaker = Speaker()
- HomeMediator Object ์์ฑ ๋ฐ Clock, light, speaker reference๋ฅผ ๋๊ฒจ์ค๋๋ค.
mediator = HomeMediator(clock, light, speaker)
- ๊ฐ๊ฐ์ Object๋ค์ ๋ํด์ mediator reference๋ฅผ ์ค์ ํฉ๋๋ค.
clock.setMediator(mediator)
light.setMediator(mediator)
speaker.setMediator(mediator)
- ์๊ณ์์ ์๋ ์ธ๋ฆฐ ๊ฒฝ์ฐ ์๋, ์กฐ๋ช , ์คํผ์ปค๊ฐ ์ผ์ง๋๋ค.
clock.Alarm()
# "alarm on", "speaker on", "light On"
- ์กฐ๋ช ์ ์ ๋ ๊ฒฝ์ฐ ์กฐ๋ช ์ด ๊บผ์ง๊ณ ์คํผ์ปค๊ฐ ๊บผ์ง๋๋ค.
light.Off() # "light off", "speaker off"
Mediator Pattern์ ํต์ฌ์ Object๊ฐ์ Directํ Communication์ Mediator๋ก ๋๋ฆผ์ผ๋ก์จ Object๊ฐ์ Dependency๋ฅผ ์ค์ด๋ ๊ฒ์ ๋๋ค.
๋ฐ์ํ
'๐บ๏ธ Design Pattern' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Design Pattern] Visitor Pattern - ๋ฐฉ๋ฌธ์ ํจํด (0) | 2024.06.10 |
---|---|
[Design Pattern] Observer Pattern - ์ต์ ๋ฒ ํจํด (0) | 2024.06.09 |
[Design Pattern] Memento Pattern - ๋ฉ๋ฉํ ํจํด (0) | 2024.06.09 |
[Design Pattern] Chain of Responsibility (0) | 2024.06.09 |
[Design Pattern] Command Pattern - ์ปค๋งจ๋ ํจํด (0) | 2024.06.09 |