【Swift】MVP를 간단히 정리해 본다

소개



이번에는 MVP 아키텍처에 대해 간단하게 정리하고 싶습니다.

MVP란?



특징
· Model, View, Presenter로 분할되는 GUI 아키텍처
· 데이터 동기화 방법에는 PassiveView와 SupervisingController의 두 가지가 있습니다.

플로우 동기화 및 옵저버 동기화



먼저 PassiveView와 SupervisingController를 이해하기 전에 플로우 동기화 및 옵저버 동기화에 대해 설명합니다.

흐름 동기화



상위 모듈의 데이터를 하위 모듈에 적절히 설정하여 동기화하는 동기화 방법
즉, 절차적인 동기화 방법.

장점
· 화면 전환 사이의 데이터 전달 등으로 데이터 흐름을 추적하기 쉽습니다.
→ 상위 모듈(전이처)이 하위 모듈(전이원)의 참조를 가질 수 있으므로 유효

단점
・공통한 데이터를 참조하고 있는 모든 개소의 참조를 가져 두지 않으면 안되기 때문에, 참조의 관리가 번잡해지기 쉽다.

옵저버 동기화



하위 모듈(감시원)이 상위 모듈(감시처)로부터 Observer 패턴을 사용해 보내지는 이벤트를 받아 데이터를 동기시키는 동기 방법.
즉, 선언적인 동기화 방법이다.

장점
・공통한 감시처를 가지는 복수의 장소에서 데이터 동기화를 하기 쉽다
· 상위 모듈이 하위 모듈에 대한 참조를 가질 필요가 없으며 구성 요소 간의 거리에 관계없이 데이터 동기화가 가능합니다. (서로 느슨하게 결합)

단점
· 데이터 변경시마다 동기 처리가 실행되기 때문에, 언제 데이터 동기가 행해지는지를 추구하기 어렵다.

모델



MVC, MVVM 등도 Model과 같다.

보기



View+ViewController

Presenter



View 및 Model 중개자
프레젠테이션 로직을 담당
1View당 1Presenter 작성하는 경우가 많다
Presenter에서는 View를 weak 참조하는 경우가 많다

PassiveView



Presenter→View에서 플로우 동기화 사용

MVP의 흐름 동기화 예
myNameLabel.text = "REON"
tableView.reloadData()

View는 모든 사용자 입력 이벤트를 Presenter에 전달합니다. Presenter는 입력에 따라 프레젠테이션 로직을 처리하여 View에 수속적인 드로잉 처리를 한다.
View는 Presenter의 지시에 의해서만 묘화 처리를 행하고, View를 기준으로 한 묘화 처리는 행하지 않는다.



SupervisingController



플로우 동기화와 옵저버 동기화 모두 사용
Presenter→View 간의 흐름 동기화
Model→View 간의 옵저버 동기화
감시원인 View가 감시처인 Model로부터 NotificationCenter 등에서 보내지는 이벤트를 수신하여 묘화 처리를 행하는 것을 예로서 들 수 있다.
View에는 간단한 프레젠테이션 로직이 있습니다.
Presenter에는 복잡한 프레젠테이션 로직이 있습니다.
Model은 Presenter에 의해 불려가 View에 대해서 묘화에 필요한 데이터를 이벤트 통지에 의해 건네준다.



SupervisingController는 Model→View간에 옵저버 패턴 동기를 이용하는 것으로, 처리를 간결하게 한다.

결론



MVP는 PassiveView인지 SupervisingController를 사용하는지 미소군요.

좋은 웹페이지 즐겨찾기