Programming
MVP Pattern 이란?!
Ms_Tony
2017. 12. 7. 15:55
MVP 패턴 !!
MVP 패턴이란?
- 1990년대 초기 MS사에서 공개한, MVC 기반의 GUI를 처리하기 위한 패턴
- MVC 패턴에 비해 Model과 View 간의 결합도를 낮추는데 초점을 맞춤.
- View, Model, Presenter로 나뉨
장점 :
- MVC 패턴에 비해 클래스별 코드가 짧아짐.
- 코드를 나눔으로써 TDD가 수월해짐
- View와 Model 간의 구분 가능
- Presenter의 역할을 통해 View와 Model 간의 결합도를 낮출 수 있음
- 결합도가 낮아짐에 따라 새로운 기능 추가 또는 변경 등, 유지보수 및 확장성이 좋아짐.
- View와 Model의 사용법이 분리되면서 Clean Code가 가능하다.
- Presenter의 역할을 통해 Model과 View 간의 결합도를 낮출 수
클래스의 역할에 따라 코드를 분배하는 패턴
(View, Presenter, Model)
View
- 어플리케이션의 인터페이스
- 사용자에게는 View가 곧 Interface
- 실제 View에 접근하고 화면을 갱신하는 역할을 수행
- Presenter에 의존적
- 이벤트를 Presenter에 전달
- Presenter에서 데이터를 전달받아서 사용자에게 알맞은 화면 제공
- Presenter가 보내주는 데이터에 따라 로딩 / 경고 / 대화창 등을 표현
Presenter
- Model과 View를 연결 (매개체)
- MVP에서 Presenter는 기능/흐름을 제공
- 요구사항이 Presenter의 기능에 대응
- 사용자 요청에 반응
- View의 흐름 제어
Model
- 내부적으로 사용되는 데이터를 저장하고, 처리하는 역할.
- ‘비즈니스 로직’과 ‘어플리케이션 데이터’
- 인증
- 위치 데이터
- 그 외 네트워크 통신 등
- Presenter가 요청한 작업을 수행
View는 또다시 Interface와 View Component(구현체)로 구분할 수있는데,
- Interface
- 사용자에게 보여질 기능을 정의
- Presenter가 호출할 기능을 정의
- View Component
- Interface에 정의한 기능의 구현 제공
- 사용자 이벤트를 Presenter에 전달
- 참조한 이론 사이트 주소 !! 한번씩 읽어보시면 상세한 설명을 해주셔서 큰 도움이 됩니다.
- [MVP for Android: how to organize the presentation layer] - https://antonioleiva.com/mvp-android
- [Adapter, 누구냐 넌? - Data? View?] - https://medium.com/@jsuch2362/adapter-%EB%88%84%EA%B5%AC%EB%83%90-%EB%84%8C-data-view-2db7eff11c20
- [Android MVP 무작정 따라하기] - http://thdev.tech/androiddev/2016/10/12/Android-MVP-Intro.html
- 관련 예제 (역시 백문이 불여일견, 코드를 직접 보는 것이 가장 빠를 것 같습니다.)
- https://github.com/TonyChoiMS/DaggerExample (- Dagger Example의 경우 참고 git이 있었는데 찾지 못하고있습니다. 혹시 주소를 아시는분은 댓글로 알려주시면 감사하겠습니다!)
- https://github.com/antoniolg/androidmvp
- https://github.com/hitherejoe/Bourbon
- https://github.com/taehwandev/AndroidMVPSample
- https://medium.com/@nurrohman/a-simple-android-apps-with-mvp-dagger-rxjava-and-retrofit-4edb214a66d7