brunch

You can make anything
by writing

C.S.Lewis

by 윤민섭 Dec 01. 2020

Mediator Pattern

내가 대신 전달할게 패턴

Mediator pattern은 객체 간 통신하는 방법을 캡슐화하는 디자인 패턴입니다.



Colleague 객체들은 각각 통신하길 원합니다. 또 Colleague Protocol을 준수하기도 하죠.

Colleague Protocol 각 Colleague 객체들이 반드시 구현해야 할 메서드와 프로퍼티를 정의합니다.

Mediator 객체는 Colleague 객체들의 통신을 control 하는 객체입니다. 물론, Mediator Protocol을 준수합니다. Colleague 객체들은 직접 인터렉션 하는 대신 Mediator 객체를 통해 통신합니다.


이렇게 설명만 놓고 보면 어떤 디자인 패턴인지 잘 모르겠죠. 비행기와 관제탑을 예시로 사용해보겠습니다.

통신 기술이 발전하기 전, 비행기는 비행기끼리 통신할 수 없고 관제탑을 통해서만 소통이 가능했다 가정해보겠습니다.

관제탑은 여러 곳에 있을 수 있고 비행기도 많이 있습니다. 서로 통신하기 위해선 약속이 필요할 것 같습니다.

관제탑은 Mediator Protocol이라는 통신 규약을 따르고, 비행기는 Colleage Protocol이라는 통신 규약을 따르도록 만들었습니다. 규약을 따르는 비행기만 관제탑에 등록할 수 있습니다.


먼저 규약을 정의한 Protocol 먼저 보겠습니다.


관제탑이 따르는 MediatorProtocol엔 ColleageProtocol을 준수하는 airplane들을 참조할 수 있는 프로퍼티와 전달받은 메시지를 보내는 메서드가 있습니다.


비행기가 따르는 ColleageProtocol엔 관제탑에 대한 정보를 갖고 있는 MediatorProtocol과 메시지를 전달하거나 받을 수 있는 메서드가 있습니다.


이제 구체 클래스를 보겠습니다. 눈여겨볼 코드는 ControlTower의 send 메서드입니다.

메시지를 보낸 비행기만 제외하고 등록된 비행기들에게 메시지를 전달하는 것을 볼 수 있습니다.



테스트 코드를 실행하면 airplane1이 보낸 메시지를 control tower를 통해 airplane2, airplane3이 받는 것을 확인할 수 있습니다.



Mediator Pattern이 조금 이해되시나요? 

iOS 개발에 있어서 어떤 상황에 적절하게 사용될지 댓글로 의논해도 좋을 것 같습니다.

읽어주셔서 고맙습니다.



Raywenderlich의 Design Patterns by Tutorials를 참고했습니다.

https://www.raywenderlich.com/books/design-patterns-by-tutorials/v3.0

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari