MVP 패턴

gjeon·2021년 12월 8일
0

디자인 패턴

목록 보기
3/4

MVP 패턴 이란?

  • Model View Presenter 로 MVC 패턴의 파생 패턴이다.
  • 사용자 인터페이스를 개발하기 위해 대부분 사용된다.
  • Model, View 는 MVC 패턴과 동일하고, Controller 대신 Presenter가 존재한다.
  • View와 Model을 완전히 분리해서 사용하기 위해서 생긴 패턴이라는것 같다.

Model

  • 모델은 모든 데이터가 저장되고 조작되는 부분이다.
  • View와 Presenter에 의존적이지 않은 독립적인 영역.

View

  • 데이터를 표시하고 모든 명령을 발표자에게 다시 라우팅하는 수동 인터페이스이다.

Presenter

  • Presenter는 View와 Model에 대해 작동하며 Model과 View 모두에서 모든 정보를 검색하고 둘 사이에 정보를 보낸다.
  • Controller와 역할이 비슷하지만 Interface를 사용한다는 것의 차이가 있다.
  • 이에 따라 MVC가 가진 테스트 가능성 문제와 함께 모듈화/유연성 문제 역시 해결할 수 있음
  • 프리젠터(Presenter)의 역할을 한줄로 표현한다면 뷰(View)와 모델(Model) 사이에서 자료 전달 역할을 함

본질적으로는 MVC의 컨트롤러와 같지만, 뷰에 연결되는 것이 아니라 그냥 인터페이스라는 점이 다르다. 이에 따라 MVC가 가진 테스트 가능성 문제와 함께 모듈화/유연성 문제 역시 해결한다. 사실 극단적으로 MVP를 따르는 사람들은 프리젠터가 절대로 어떤 안드로이드 API나 코드라도 참조해서는 안된다고 주장한다.

동작

  1. 사용자의 input이 View를 통해 들어온다.
  2. View는 필요한 데이터를 Presenter에게 요청한다.
  3. Presenter는 Model에게 데이터를 요청한다.
  4. Model은 변경된 데이터를 Presenter에게 전달한다.
  5. Presenter는 View에게 데이터를 전달한다.
  6. View는 받은 데이터를 UI에 표현한다.

장점

  • Presenter가 Model과 View의 중간다리 역할을 하기 때문에 Model과 View 사이의 의존성이 없다.
  • 대부분의 책임을 Presenter와 Model이 가지고 있어 View는 출력만 하는 역할을 한다
  • Test할 때 View에 대한 책임이 분리되어 있기에 각 요소들을 독립적으로 테스팅할 수 있다

단점

Model과 View 사이의 의존성을 해결했지만, 역으로 Presenter와 View 사이가 1:1로 강한 의존성을 가진다.

정리

MVC의 Controller와 다르게 Presenter는 뷰에게 무언가를 표시하는 방법을 지시하는 대신, 표시할 내용만 전달한다.(보기를 구성하는 방법만 지정한다.)
그리고 인터페이스와 로직을 분리해서 관리할 수 있어 각 행동의 의도가 더 단순하고 명확해진다.
하지만 Controller 처럼 시간이 지남에 따라 추가 비즈니스 로직이 모이는 경향이 있어 문제가 발생하기 쉽고 분리하기 어려운 Presenter가 생겨서 유지보수에 어려움이 있다. 그리고 프로젝트가 커질 수록 Presenter의 자원이 많아질 수 있다.

MVP는 애플리케이션을 모듈로 나눌 수 있다는 점에서 MVC보다 약간 우위에 있다. 따라서 지속적으로 뷰를 생성하지 않아도 된다. 즉, MVP는 뷰를 재사용 가능하게 만드는데 도움이 될 수 있다.

Reference

https://devscorch.com/?p=1460
https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%8D%B8-%EB%B7%B0-%ED%94%84%EB%A6%AC%EC%A0%A0%ED%84%B0
https://swimjiy.github.io/2019-05-28-web-mvc-mvp-mvvm
https://cjw-awdsd.tistory.com/9
https://jhtop0419.tistory.com/20
https://academy.realm.io/kr/posts/eric-maxwell-mvc-mvp-and-mvvm-on-android/
https://www.baeldung.com/mvc-vs-mvp-pattern

profile
개발자 되기

0개의 댓글