아직은 개린이

[iOS 아키텍처 패턴] MVP 적용해보기 본문

Swift + iOS/iOS

[iOS 아키텍처 패턴] MVP 적용해보기

jiyeonlab 2020. 3. 2. 17:43

MVC 패턴에 워낙 익숙해져있어서, 새로운 패턴으로 코드를 작성하는 연습을 많이 해봐야 할 것 같다!

 

우선 오늘은 간단한 예제로 MVP 패턴에 대해 학습한 걸 정리해보려고 한다.

 


MVP

간단히 MVP에서 각각이 무엇을 의미하는지 다시 짚고 넘어가보자.

  • Model - MVC 패턴에서 의미하는 모델과 같은 역할을 한다. 앱의 실행에 필요한 실질적인 데이터를 갖고 있다.
  • View - UIViewUIViewController가 여기에 해당한다. 비즈니스 로직과 관련된 일은 모두 Presenter가 하도록 한다.
  • Presenter - UIKit과 관련이 없는 로직들을 수행한다. 사용자 응답에 반응하거나 UI를 업데이트하는 일을 한다.

예제코드

화면에 나타난 두 버튼 중 어느 버튼을 클릭했는지 출력하는 간단한 프로젝트를 만들어보자!

 

1. 버튼에 대한 정보(색 이름과 설명)를 가지고 있는 Model을 만들자.

 

 

2. Data provider 역할을 하는 Service Class를 만들자.

 

 

3. View에서 구현할 메소드가 포함된 Protocol을 선언한다.

 

 

4. 이제 Presenter를 만들어보자. Presenter는 ModelView중재자 역할을 한다. 따라서 Presenter에는 Model, View에 관한 프로퍼티를 가지고 있다.

 

 

5. 스토리보드에서 두 개의 버튼과 description을 출력할 label을 추가해준다.

스토리보드 화면

 

6. ViewController 코드를 작성한다. ViewController에는 오롯이 View와 관련된 일만 구현되어있다.

 

 

 

결과적으로 아래와 같은 실행화면을 확인할 수 있다!

실행 결과

 


코드를 전체적으로 정리해보면,

ViewPresenter를 소유하고, Presenter는 user의 action, model의 변화에 따라 View를 update한다.

즉, PresenterModelView의 중재자 역할을 함으로써 MVC 패턴과 달리 Model과 View에 독립성을 확보하였다.

 

하지만, Presenter에서는 View를 weak로 참조하고, View는 Presenter를 강한 참조로 소유하기 때문에 View와 Presenter가 완전히 독립되어있다고는 할 수 없다. 또한, Presenter과 이를 구현하기 위한 Protocol의 추가로 MVC 보다 코드가 길어진다는 점도 확인할 수 있었다.

 

아직은 코드를 작성할 때 MVP 패턴에 맞게 머리가 돌아가지는 않는 것 같다..

위의 예제에 조금씩 살을 붙여서 연습해보자!

 

또한, Unit Test까지 덧붙여서 간단한 예제를 수행해보는 연습도 해야할 것 같다!

 


참고: https://medium.com/@saad.eloulladi/ios-swift-mvp-architecture-pattern-a2b0c2d310a3