[개념]
MVP 패턴은 Model-View-Presnet로 이루어진다.
Model : 데이터 관리
View : 화면 표현
Presenter : Model 과 View를 연결시키는 다리 역할
기본적으로 모든 데이터 관리는 Model, 모든 화면 표현은 View가 둘 사이를 이어주는 것은 Presenter가 수행함.
[간단 예시]
상황 : 검색 버튼을 누르면 화면에 이미지가 뜸
사용자
- 검색 버튼을 클릭함
- 화면에 이미지가 뜸
앱
- M, V, P 초기화 : 앱이 생성되면서 Model, View, Presenter가 생성되고 등록됨.
- P -> V : Presenter에서 View에게 버튼을 그리라고 명령
- V : 버튼을 그리고 대기
- 사용자가 버튼을 누름.
- V -> P : View가 Presenter에게 버튼이 눌림을 알림.
- P -> M : 검색해서 이미지를 가져오라고 명령.
- M 동작 : 검색해서 이미지를 찾음.
- M -> P : 검색한 이미지를 전달함.
- p -> V : View에게 이미지를 전달하고 화면에 띄우라고 명령
- V 동작 : 이미지를 화면에 띄움
각자의 일을 절대 침범하지 않음.
[MVC vs MVP]
MVC는 Model - View - Controller로 이루어진 디자인 패턴입니다.
Controller와 Presenter의 역할을 비슷하지만 다릅니다.
MVC패턴은 사용자가 이벤트를 발생했을 때 Controller가 먼저 반응을 합니다.
그 후 Model에게 데이터를 요청하고 맞는 View에게 반환합니다.
MVP패턴은 사용자가 이벤트를 발생했을 때 View가 먼저 반응을 합니다.
그 후 해당 이벤트를 담당하는 Presenter를 호출하고 Model의 작업을 받은 후 View에게 반환합니다.
하지만 Android에서는 사용자 이벤트 반응이 View가 첫번째일수 밖에 없어 View가 곧 Controller역할도 수행해야 합니다.
이 때문에, 각각의 책임을 분리시키지 못하고, 모듈화시키기가 어렵습니다.
[MVP를 써야하는 이유]
- 코드를 모듈화 시킬 수 있다.
- 협업시에 기능별로 분리되어 있어 작업하기 수월하다.
- 유닛테스트 하기 용이하다.