안드로이드 개발 팁 블로그

MODEL VIEW PRESENTER (MVP) IN ANDROID, PART 1 본문

Android Tip

MODEL VIEW PRESENTER (MVP) IN ANDROID, PART 1

tiii 2016. 3. 17. 12:25
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

본 포스팅은 TIN MEGALI의 동의를 얻어 MODEL VIEW PRESENTER (MVP) IN ANDROID, PART 1을 번역한 글 입니다.
원문은 아래의 링크를 통해 확인할 수 있습니다.
[원문] : http://www.tinmegali.com/en/model-view-presenter-android-part-1/

Architecture 패턴은 컴퓨터 과학의 기본적인 부분입니다. 이것은 프로젝트를 깨끗하고 확장가능하며 테스트 가능하게 할 수 있는 유일한 방법입니다. 산업 표준을 고려하여 수년간 개발된 패턴은 솔루션으로 인정 받습니다. 패턴들은 끊임없이 진화하고 있습니다. 안드로이드 SDK에서 신뢰성이 높은 MVC 패턴이 MVP모델로 서서히 바뀌고 있습니다.

이 기사의 첫번째로 우리는 MVC 패턴과 MVP패턴의 차이점, 왜 MVC패턴이 사장되고 있는지, MVP를 적용하는 방법, 그리고 그 이점에 대해서 논의할 것 입니다.

안드로이드 SDK

안드로이드 SDK를 간단히 분석해보면, layout, activity, data 사이에 관계가 있고 이것은 우리에게 안드로이드에서 Model-View-Controller(MVC)패턴이 가장 적합할 것 같은 생각이 든다. 그러나 프로젝트가 점점 복잡해지면 관계를 분리하는데 MVC는 충분하지 않습니다. unit Test 할 때에 특히 그렇습니다.

하지만 안드로이드 SDK는 소위 안티패턴이라 불리는 패턴 없는 것들을 포함한 다른 타입의 아키텍쳐 패턴을 사용할 수 있도록 짜여져 있습니다.비록 MVC가 믿을 만하고 잘 알려진 솔루션이라고 할지라도 Model View Presenter (MVP)에게 자리를 위협받고 있습니다. 왜냐하면 MVP는 몇가지 강점을 제공하는데 그중 하나는 관계 분리를 MVC 보다 잘 정의 할 수 있습니다. 

MVC나 MVP 를 내 프로젝트에 꼭 써야 하는가?

이 질문에 대한 정확한 답변은 없습니다. 어떤 사람들은 MVC가 맞는 솔루션이라고 믿고 있습니다. 다른 사람들은 MVP 또는 예를 들면 MVVM 같은 다른 솔루션을 주장 할 것입니다. 각각의 장,단점이 있기 때문에 질문에 대한 유일한 답변은 당신이 현명한 선택을 할 수 있도록 각각의 솔루션의 장,단점을 이해하는 것 입니다.

Model-View-Controller (MVC) 

Model-View-Controller (MVC) 은 소프트웨어 아키텍쳐 패턴으로 대개(꼭 그런 것 만은 아니다.) 컴퓨터에서 사용자 인터페이스를 구현하기 위한 것입니다. 사용자로부터 정보를 보여주거나 받기위해 소프트웨어 어플리케이션의 내부 표현을 상호 연결된 세 부분으로 분할 합니다.

wikipedia

Model–view–presenter (MVP)는 MVC에서 파생된 아키텍쳐 패턴입니다. 그리고 주로 사용자 인터페이스를 구축하는데 사용됩니다.
MVP에서 presenter는 "중간자" 역활을 하고 있습니다. MVP에서는 모든 프리젠테이션 로직을 presenter로 푸시합니다.

wikipedia

MVC와 MVP의 차이점

Model View Controller

  • Controller들은 행동의 토대가 되고 여러 view에 공유 될 수 있습니다.
  • View 와 Model은 직접적으로 통신할 수 있습니다.

Model View Presenter

  • View를 Model로 부터 더 분리 시킵니다.Presenter는 Model과 View 사이의 중재자 역할을 합니다.
  • unit test를 쉽게 생성 할 수 있습니다.
  • 복합View를 위한 다수의 Presenter가 사용 될 가능성이 있지만 일반적으로 View와 Presenter 사이에는 1:1 매칭입니다.

Android에서 Model View Presenter (MVP)

Android에서는 관계 분리를 만족 스럽게 정의 할 수 없습니다. 엑티비티를 예를 들면 data 메커니즘과 너무 긴밀한 관계를 맺고 있습니다. 하지만 관계분리를 통한 확장, 유지보수, 테스트를 쉽게 할 수 있는 큰 장점이 있기 때문에 우리는 MVP를 채택하였습니다.

안드로이드에서 MVP 패턴의 레이아웃 관계

MVP 패턴을 구현하는 최고의 방법

이것은 실제로 모호한 주제이다. 안드로이드에 맞게 개조하기 위한 다양한 접근법과 다른 많은 해결책이 있다. 패턴을 구현하는 방법은 Presenter의 역할에 따라 달라진다. 그러나 기본적으로 MVP 기본원칙은 지켜져야 한다.

Presenter

Presenter는 중간자로 View와 모델 사이의 행위에 책임이 있다. Presenter는 data를 모델로 부터 받거나 뷰에 적합하게 돌려준다. 당신이 뷰와 함께 상호 작용하여 발생하는 것을 결정하는 것이 일반적인 MVC와 다릅니다.

View

뷰는 일반적으로 엑티비티에서 구현하고 presenter 대한 참조가 포함된다.View가 하는 일은 Presenter의 인터페이스를 상속 받아 메서드를 호출 하는 것이다.

Model

좋은 계층화 구조를 포함하는 애플리케이션에서 model은 도메인 레이아웃 또는 비지니스 로직이 되기 위한 유일한 관문이다. 우리가 View에서 표시하고 자하는 데이타를 제공해 주는 것이라고 알고 있으면 됩니다.


이들에 대한 우수한 정의는 아래의 기사에서 인용하였습니다. Antonio Leiva’s article.

이 시리즈의 다음 글에서는 안드로이드 SDK를 제외한 외부 라이브러리를 사용하지 않고 보수적인 방법으로 표준코드만 사용하여 안드로이드에서 MVP 패턴을 구현해 볼 것 입니다. 이런 접근이 MVP의 레이아웃 사이에서 다른 관계를 이해하는데 도움이 될 것 입니다.

만약 최종의 MVP 라이브러리를 받고 싶다면 이곳에서 확인이 가능합니다. Dr. Douglas C. Schmidt의 것을 기본으로 하고 있습니다.


조만간 다시 뵙겠습니다!

참조:

  • http://antonioleiva.com/mvp-android/
  • http://hannesdorfmann.com/android/mosby
  • http://www.codeproject.com/Articles/288928/Differences-between-MVC-and-MVP-for-Beginners
  • https://github.com/konmik/konmik.github.io/wiki/Introduction-to-Model-View-Presenter-on-Android
  • https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93presenter


Translate by Lee young chan



Comments