WIPIVERSE

모델-뷰-프리젠터

정의
모델-뷰-프리젠터(Model-View-Presenter, MVP)는 사용자 인터페이스(UI) 개발을 위한 구조적 디자인 패턴 중 하나로, 애플리케이션을 모델(Model), 뷰(View), 프리젠터(Presenter)의 세 구성 요소로 분리한다. 모델은 데이터와 비즈니스 로직을 담당하고, 뷰는 사용자에게 정보를 표시하는 UI 요소를 담당한다. 프리젠터는 모델과 뷰 사이의 중재자 역할을 수행하여, 사용자 입력을 모델에 전달하고 모델의 상태 변화를 뷰에 반영한다.

역사·어원
MVP 패턴은 1990년대 후반에 마이크로소프트의 윈도우 폼(Windows Forms) 및 .NET 프레임워크 환경에서 개발된 프레젠테이션 모델(Presentation Model) 개념을 확장한 형태로 등장하였다. “Model‑View‑Presenter”라는 명칭은 각각의 역할을 직관적으로 나타내는 영어 단어를 조합한 것이다.

구성 요소와 역할

구성 요소 주요 책임
모델 (Model) 비즈니스 로직, 데이터 구조, 데이터 검증, 영속성 관리 등. UI와 무관하게 동작한다.
뷰 (View) 화면 요소(버튼, 텍스트 박스 등)와 레이아웃을 정의한다. 프리젠터에게 직접적인 로직을 전달하지 않는다.
프리젠터 (Presenter) 뷰와 모델을 연결한다. 사용자의 입력 이벤트를 받아 모델에 전달하고, 모델의 업데이트를 뷰에 반영한다. 뷰에 대한 의존성을 인터페이스 형태로 선언해 테스트가 용이하도록 설계한다.

동작 흐름

  1. 사용자가 UI(뷰)에서 입력을 발생시킨다.
  2. 뷰는 해당 이벤트를 프리젠터에 전달한다(보통 인터페이스 메서드 호출).
  3. 프리젠터는 입력을 검증하고, 필요 시 모델에 작업을 요청한다.
  4. 모델이 상태를 변경하면, 프리젠터는 변경된 데이터를 뷰에 전달한다.
  5. 뷰는 전달받은 데이터를 사용해 화면을 갱신한다.

주요 특징 및 장점

  • 관심사의 명확한 분리: UI 로직과 비즈니스 로직이 독립적으로 존재하므로 유지보수가 용이하다.
  • 테스트 용이성: 프리젠터는 UI 프레임워크에 직접 의존하지 않으므로 단위 테스트가 쉬워진다.
  • 플랫폼 독립성: 뷰를 교체하거나 다른 UI 프레임워크(예: Android, iOS, 웹)로 옮길 때 프리젠터와 모델은 그대로 재사용 가능하다.

단점 및 고려 사항

  • 복잡도 증가: 작은 규모의 UI에서는 MVP 구조가 오히려 과도한 설계가 될 수 있다.
  • 중복 코드: 프리젠터와 뷰 사이에 인터페이스 정의가 필요해 초기 개발 작업이 늘어날 수 있다.

주요 적용 사례 및 언어 지원

  • Android: Google의 Android 개발 가이드에서 MVP를 권장하며, Kotlin·Java 기반 구현 예제가 풍부하다.
  • .NET: WinForms, WPF, Xamarin.Forms 등에서 MVP가 사용된다.
  • JavaScript/TypeScript: 웹 프레임워크(예: Angular, React와 결합된 MVP 구현)에서도 적용 사례가 있다.

관련 패턴

  • MVC (Model-View-Controller): 프리젠터가 컨트롤러와 유사하지만, MVP에서는 뷰가 프리젠터에 대해 더 강하게 의존하고, 프리젠터가 뷰를 직접 조작한다는 점에서 차이가 있다.
  • MVVM (Model-View-ViewModel): 데이터 바인딩을 중심으로 설계된 패턴으로, UI 프레임워크가 바인딩 메커니즘을 제공할 때 주로 사용된다.

요약
모델-뷰-프리젠터는 UI 애플리케이션의 구조를 명확히 분리하여 유지보수성과 테스트 가능성을 높이는 디자인 패턴이다. 특히 복잡하고 확장성이 요구되는 프로젝트에서 모델과 UI 로직을 독립적으로 관리하고자 할 때 효과적으로 활용된다.

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기