[Android] 디자인패턴 5 - MVVM패턴

MVVM패턴이란? 참고 https://medium.com/@jsuch2362/android-%EC%97%90%EC%84%9C-mvvm-%EC%9C%BC%EB%A1%9C-%EA%B8%B4-%EC%97%AC%EC%A0%95%EC%9D%84-82494151f312 mvp패턴에서 presenter의 문제점이 있다.  컨트롤러와 마찬가지로 시간이 지남에 따라 추가되는 비즈니스 로직이 모이게 된다. 시간이 흐르면 거대하고 다루기 어렵고 문제가 발생하기 쉽고 분리하기 어려운 presenter를 발견하게 된다. *신중한 개발자라면 앱의 변화에 맞춰 해결해 나갈 수 있다.  - Model, View, ViewModel의 약자 - 뷰와 모델을 연결하기 위해 사용해야하는 연결 코드 감소 - MVP에서 파생된 패턴 - Microsoft에 의해 제안된 패턴 *Model : MVC, MVP와 동일하다. *View : ViewModel에 의해 보여지는 Observable변수와 액션에 유연하게 바인딩된다. *ViewModel : Model을 래핑하고 View에 필요한 Observable 데이터를 준비한다.                   -> View가 Model에 이벤트를 전달하도록 Hook을 준비한다.                   -> ViewModel은 View에 종속되지 않는다. 이미지1 MVVM 관계도 *View와 ViewModel의 관계 - ViewModel은 Model을 알지만 View를 알지 못한다. - View는 Model을 알지 못하지만 ViewModel은 알 수 있다. - View는 ViewModel을 관찰하고 있다가 변화가 감지되면 화면을 갱신한다. DataBinding : View와 ViewModel 독립  ...

[Android] 디자인패턴 4 - MVP패턴 Google todo-mvp

이미지
예제 참고  https://github.com/android/architecture-samples/tree/todo-mvp todo-mvp 전체를 분석하기에는 양이 너무 많기 때문에 참고하여 간단하게 MainActivity와 프래그먼트를 구현한 예제를 통해서 mvp를 알아보도록 하자.  실행화면 기능은 제외하고 todo-mvp에서 구현한 mvp의 껍데기만 남겨놓았다. (실제 todo-mvp와는 조금 다르다)  메인 액티비티에서 영상, 기록, test 3가지의 프래그먼트를 보여주고 있다.  Navigation Drawer를 사용하여 왼쪽에 네비게이션 뷰를 구현하였고 그안에있는 내정보, About, Notice를 클릭했을때 각각 구분하여 토스트 메시지를 띄워주는 상태이다. 현재 상태에서 mvp를 어떤식으로 구현하였는지 살펴보고 기능을 하나씩 추가해보면서 분석해보도록 하겠다.  클래스 구조  이미지 1 todo-mvp 구조  mvp형태는 그대로 가지고 있으면서 Contract, BasePresenter, BaseView 인터페이스가 추가되었다. 프래그먼트가 어떠한 방식으로 액티비티에 표시되는지 자세히 보도록 하자.  이미지 2 todo-mvp UML 프래그먼트가 표시되는 과정을 간략하게 표현하면 이미지 2와 같다. 번호 순서대로 하나하나 씩 분석해 보았다.  1. BaseView<T> 인터페이스 public interface BaseView < T > { void setPresenter ( T presenter ) ; } - 특정하지 않은 형태를 제네릭으로 지정하는 인터페이스이다.  * T는 Contract에서 생성할 Presenter가 지정된다.  - Presenter를 입력하는 setPresenter()메소...

[Android] 디자인패턴 3 - MVP 패턴

이미지
MVP패턴이란? 안드로이드에서 MVC 패턴에 대해 떠올려 보면 Model은 분리되어 있고 View와 Control이 함께 있는 구조라는 것이다. 그 예를 Activity로 들 수 있고 실제로 Activity 내부에서 View와 Control에 관련된 내용들을 모두 구현할 수 있고 그렇게 해왔다. 그러면서 Activity라는 하나의 클래스에 굉장히 많은 로직이 포함되고 코드줄이 길어진다는 문제점이 발생한다는 것도 기억해보자.  - Model, View, Presenter의 약자 - 안드로이드에서 MVC 패턴 중 View와 Control이 함께 공존하는 문제점 해결 - 안드로이드에서 가장 많이 사용하는 패턴 *Model : Data와 관련된 처리 / MVC의 Model과 동일하다. *View :  이벤트가 발생하면 Presenter로 알림 *Presenter : View에서 전달받은 이벤트를 처리하여 다시 View로 반환 MVP는 View와 Control이 묶이지 않도록 한다. 이미지1 MVP 동작 순서 1. View/Control: 이벤트 발생 2. View/Control: 이벤트를 Presenter에 알림 3. Presenter : 이벤트 수신하고 이벤트 형태에 맞게 Model에 데이터 요청 4. Model : Presenter의 요청 확인 5. Model : Presenter에 데이터 전달 6. Presenter : Model로부터 전송받은 데이터를 가공하여 View/Control로 전달 7. View/Control: Presenter로부터 전송받은 데이터에 맞게 UI 갱신 상황에 따라 Presenter에서 Model에 데이터를 요청하지 않을 수도 있지만 기본적인 형태는 위와 같다. *View가 아닌 View/Control이라고 표기한 이유는 안드로이드에서 기본적으로 View와 Control이 공존한다는 것을 표현한 것이다. 지난 MVC 글에서 안드로이드 MVC의 동작순서를 보면 Vi...