3월 25일 안드로이드 컨퍼런스가 열립니다. 드로이드 나이츠 정보 보러가기

Android에서 테스트 코드를 작성하기 위한 방법 중 하나로 MVP를 선택합니다.

MVP는 다음과 같이 생겼습니다.

mvp

Model, View, Presenter 간의 상호 의존성을 떨어트리기 위한 용도임과 동시에 Test Code 작성을 위한 최적의? 구조 중 하나입니다.

기존 안드로이드 코드 작성 시에는 View에 모든 코드가 포함되어 있다거나, 중복 코드를 Util 형태로 사용하는 경우도 많았습니다.

그에 비해 MVP는 각각의 독립된 코드의 구현이 가능한 형태입니다.


MVP를 적용하기 위해선?

저는 Test 코드 작성을 위해서 MVP를 시작하였습니다.

의도는 좋지만, 그에 비해서 어떤 식으로 접근해야 할지에 대해서 난해합니다.

MVP를 통해서 Test 코드 작성하는 것도 좋고, View를 완전히 분리시킬 수 있다는 점도 좋습니다.

일단 이런 이야기는 MVP에 익숙한 사람이나 할 수 있는 말입니다.

그래서 이번 글에서는 MVP의 동작 방법에 대해서 그림과 함께 우선 정리해보려고 합니다.


그간 MVP에 대해서 정리한 글

저는 무작정 google android architecture를 따라 하였고, GDE 스티브(정승욱)님의 Adapter, 누구냐 넌? — Data? View?을 따라 해보기도 하였습니다.

중간중간 추천하는 자료들도 많이 살펴보았는데 그 중 GDE 커니님이 소개해준 MVP Dribbble - Bourbon

이런 자료들의 조합이 현재 제가 만든 Kotlin 기반의 MVP Base를 만들기도 하였습니다.


MVP란?

그러면 MVP는 어떤 단어의 조합일까요?

일단 MVP에 대해서 알기 위해서는 MVP의 각 단어의 역할과 목적이 중요합니다. - 이건 MVC도 마찬가지입니다.

그래서 다음과 같이 View, Presenter, Model의 약자를 먼저 정리해보면…

  • model : Data와 관련된 처리를 담당
    • Data의 전반적인 부분을 model에서 담당하고, 네트워크, 로컬 데이터 등을 포함
  • View : 사용자의 실질적인 이벤트가 발생하고, 이를 처리 담당자인 Presenter로 전달
    • 완전한 View의 형태를 가지도록 설계합니다. 계산을 하거나, 데이터를 가져오는 등의 행위는 Presenter에서 처리하도록
  • Presenter : View에서 전달받은 이벤트를 처리하고, 이를 다시 View에 전달
    • View와는 무관한 Data등을 가지고, 이를 가공하고, View에 다시 전달하는 역할


MVP의 기본 패턴

MVP를 처음 접하고, 테스트 코드를 작성하지 않는다면 다음과 같은 느낌을 받을 수 있습니다.

  • 이거 뭐 그냥 빙글 빙글 돌려놓은 것 아닐까?

그래서 아래와 같은 그림으로 이를 표현할 수 있습니다.

mvp-default


이를 순서로 나열하면…

  1. View : View에서 터치 이벤트 발생
  2. View -> Presenter : Presenter이벤트 전달
  3. Presenter : View에서 요청한 이벤트 처리
  4. Presenter -> View : 처리한 결과를 View로 전달
  5. View : 처리된 결과를 바탕으로 UI를 갱신

위와 같은 형태입니다. 1~5번까지 처리가 완료되면 이후 같은 동작이 계속 적으로 일어납니다.

일반 코드라면 한 페이지 안에서 모두 처리가 되니깐 눈으로 보긴 편합니다.

따라갈 필요도 없고, 함수만 따라다니면 보기도 쉬우니깐요.

그래서 빙글 빙글 돌려놓은 것 아닐까?라는 답이 나올 수밖에 없습니다.


MVP에 모델을 더하면?

위에 기본적으로 작성한 MVP에 모델을 더하면 다음과 같이 표현됩니다.

mvp-model

글로 작성하면 아래와 같습니다.

  1. View : View에서 터치 이벤트 발생
  2. View -> Presenter : Presenter에 이벤트 전달
  3. Presenter : 이벤트의 형태에 따라 캐시 데이터를 가져오거나, Model에 요청
  4. Presenter -> Model : Presenter에서 데이터를 요청받음
  5. Model : 데이터를 로컬 또는 서버에서 가져온다
  6. Model -> Presenter : Model로부터 데이터를 통보받는다
  7. Presenter : 전달받은 데이터를 가공
  8. Presenter -> View : 가공한 데이터를 View에 전달
  9. View -> Presenter로 전달받은 데이터를 View에 갱신

여기까지의 단계를 거치게 됩니다.

상황에 따라서 Presenter는 Model을 사용할 수도 하지 않을 수도 있지만 기본 형태는 위와 같습니다.


마무리

앞으로 이러한 MVP 정의를 기본부터 차근차근 적용해볼 수 있도록 정리해보려고 합니다.

이해하기 어려우니 우선 따라 해보는게 가장 좋은 것 같습니다.

좀 더 쉽게 접근할 수 있도록 MVP 무작정 따라 하기를 만들어볼 예정입니다.

  • Activity
  • Fragment
  • RecyclerAdapter

정도를 다루어볼 예정입니다.


MVP 무작정 따라하기

무작정 따라 하기는 MVP 패턴을 이해할 수 있도록 하나씩 차근차근 작성해보는 예제입니다.

그래서 각각의 브런치와 글들을 통해서 조금씩 확장해가려고 합니다.


Tae-hwan

Android, Kotlin .. Create a content development.