Search
🚧

[WIP] GoF 디자인 패턴 - 중재자(Mediator) 패턴과 응용

subtitle
Observer 패턴과의 차이점
Tags
디자인패턴
Created
2021/05/30
2 more properties

Mediator vs Observer

큰 차이점: 상호작용 타겟의 차이
Observer 패턴: '한 객체'의 이벤트를 여러 객체가 구독.
하나의 객체에 변화가 생기면 다른 객체에서 그 상태 변화에 따라 업데이트.
데이터(Subject)를 구독하는 여러 뷰 컴포넌트들(Observers)
Mediator 패턴: '서로 다른 객체'의 이벤트를 서로 구독.
multi option selection 리스트 박스, text input, button으로 구성된 다이얼로그에서
listBox.select() → textInput.update()
textInput.update() → button.activate()
이렇게 서로 다른 객체의 이벤트를 참조하는 경우

문제

현상: 카드 게임 프로젝트에서 Game과 Player 클래스 간 결합도 문제가 있었다.
원인: 게임과 플레이어 클래스 간 상호 업데이트하는 부분 많았다.

해결: Mediator 패턴 응용

카드 클래스가 가지고 있던 책임 분리: 현재 낸 카드, 카드 스택 → CardStack 클래스로 분리
GameManager: Game 내 여러 컴포넌트 사이의 상호작용을 관리하는 Mediator. Phaser의 SceneManager에서 manager라는 이름만 따왔다.
GoF나 refactoring guru에서 Mediator 인터페이스를 보면 notify 메서드가 하나지만 가독성을 위해 컴포넌트 별로 notify 메서드를 만들었다.
간략한 샘플 코드 (player, game)
sample code 전체

References

GoF 디자인패턴 책 - 행동 패턴 - 중재자 패턴, 옵저버 패턴
Refactoring Guru: mediator pattern - typescript example
Moonsupport 옵저버 패턴과 final-form