ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MVP MVVM 모델을 활용한 안드로이드 설계
    Android/AndroidStudio 2018. 10. 8. 11:49
    MVP MVVM 모델을 활용한 안드로이드 설계

    vogella

    [Android Architecture with MVP or MVVP Tutorial] http://www.vogella.com/tutorials/AndroidArchitecture/article.html

     

    MVP MVVM 모델을 활용한 안드로이드 설계

    안드로이드 아키텍쳐

    이 튜토리얼은 테스트가능성을 증진시킬 수 있는 안드로이드 어플리케이션 아키텍쳐에 대하여 설명하고 있다.

     

    1. 안드로이드를 위한 설계

    안드로이드의 기본 탬플릿은 대규모의 액티비티 나 프래그먼트의 사용을 기본으로 한다. 이 요소들은 일반적으로 비지니싀와 UI로직을 포함하고 있다. 이 것은 테스트와 안드로이드의 유지보수를 어렵게 한다.

    다음은 테스트 가능성을 향상시킬 수 있는 유명한 패턴들이다.

    • Model View Presenter (MVP)
    • Model View View Model(MVVM) together with Android Data Binding

     

    2. Model View Presenter 설계

    MVP 설계 패턴은 테스트가능성을 향상시키기 위한 패턴이다. MVP 패턴은 data Model을 Presenter를 통해서 View로 부터 분리시킨다.

    mvp overview

    다음은 MVP 모델에서 데이터 흐름의 예시이다.

     

    Example data flow in MVP

    1. View

    MVP 패턴에서의 뷰의 구성요소들은 어플리케이션의 비주얼적인 부분을 포함한다.

    View는 오직 UI만을 포함하며 표현되는 데이터에 대한 정보나 로직은 포함하고 있지 않다. MVP 모델에서 뷰의 일반적인 사용은 Presenter에서 사용되는 인터페이스를 내보내는 것이다. Presenter 뷰를 다루기 위해서 이 인터페이스의 메소드를 사용한다. showProgressBar, updateData등의 메소드명을 예로 들수 있다.

     

    2. Presenter

    Presenter는 비지니스 로직의 기폭제 이며, 업데이트가 있을때 뷰에게 알려준다. 때문에 model과 상호작용하며 뷰를 업데이트하기위해서 모델로 부터 데이터를 전송, 패치한다. Presenter는 가능한 Android SDK와 의존해서는 안된다.

     

    3. Model

    모델은 데이터 제공자와 데이터의 패치와 업데이트를 위한 코드를 가지고 있다. 그리고 데이터 베이스를 업데이트 하고나, 웹서버와 커뮤니케이션 하기도 한다.

     

    4. MVP 디자인 패턴을 사용하기위한 고려점

    MVP 모델은 presenter의 로직의 테스트나 종속성의 대체를 쉽게 하게 한다. 그러나 MVP의 사용은 비용이 들며 어플의 코드를 길게 할 수도 있다. 또한 기본 템플릭이 현재 이러한 접근법을 사용하지 않기 때문에, MVP 구조를 이하는 개발자를 찾기도 어렵다.

     

    5. MVC(Model View Controller) 모델과의 비교

    MVP 모델에서 View는 더욱 Model과 분리되어 있다. Presenter는 모델과 뷰사이에서 커뮤니케이션 한다. 이것은 유닛 테스트를 더욱 쉽게한다. 일반적으로 Presenter와 view는 일대일 매핑되어있지만, 복잡한 view들을 위해 복합적인 presenter를 사용하기도 한다.

    MVP 모델은 안드로이드 커뮤니티에서 선호되는 패턴중에 하나이다.

     

    3. Model View View Model 설계

    MVVM 디자인 패턴은 Model View Binder로 알려져 있다.

    MMVM pattern

    1. View

    View는 어플리케이션의 비쥬얼적인 요소를 담고 있다.

    View는 일반적으로 데이터 바인딩 프레임워크를 사용하여 View model을 의하여 노출된 동작이나 관찰가능한 변수에 바인딩된다.

    예를 들어 뷰는 다음을 처리합니다.

    • Menus
    • Permissions
    • Event Listeners
    • Showing dialogs, Toasts, SnackBars
    • Working with Android View and Widget
    • Starting activities
    • All functionality which is related to the Android Context

     

    2. View model

    view model은 view를 위한 데이터를 담고 있다. 뷰의 추상화 이며 public 속성과 명령어를 내보낸다. view model은 view에 변화를 알리기위해 관찰가능한 데이터를 사용한다. 또한 model에 이벤트를 전달한다. 그리고 날것의 모델의 데이터를 보여주기 편한 데이터로 변환하는 역할도 한다.

    View model의 예시는 다음과 같은 역할은 한다.

    • 데이터 노출
    • 상태의 노출(진행, 오프라인, 에러 등)
    • 가시성의 처리
    • Input validation
    • Executing calls to the model
    • Executing methods in the view

    View model은 어플의 context를 알아야한다. Context는 다음과 같은 일을 처리한다.

    • 서비스의 시작
    • Bind to a service
    • Send a broadcast
    • Register a broadcast receiver
    • Load resource values

    다음과 같은 일을 할 수 없다.

    • show a dialog
    • Start an activity
    • Inflate a layout

     

    3. Model

    Data provider를 포함하고 데이터의 업데이트 및 패치 코드를 가지고 있다. 또한 다른 출처에서 데이터를 검색 할 수 있다.

    • REST API
    • Realm db
    • SQLite db
    • Handles broadcast
    • Shared Preferences
    • Firebase
    • etc

    기본적으로 MVP의 Model과 역할이 같다.

     

    MVP 모델과 다른점

    MVVM은 데이터 바인딩을 사용한다 그래서 좀더 이벤트 주도적인 설계이다. MVP 모델은 일반적으로 Presenter와 view의 일대일 매핑으로 되어있지만 MVVM은 하나의 view model에 만은 view를 매핑할 수 있다. MVVM 모델에서 view model은 뷰에 대한 참조가 없지만, MVP에서는 뷰가 presenter알고 있다.

     

    4. 테스트 가능성을 향상시

     

     

    'Android > AndroidStudio' 카테고리의 다른 글

    안드로이드 asynctask  (1) 2018.12.03
    커스텀 리스트뷰  (0) 2018.11.07
    안드로이드 thread와 handler  (0) 2018.07.07
    Android Guideline  (0) 2018.07.02
    Thread  (0) 2018.07.01
Designed by Tistory.