홍로그

MVP 패턴 본문

iOS

MVP 패턴

성홍민 2023. 6. 4. 13:02

📖 MVP 패턴이란?

MVP (Model-View-Presenter) 디자인 패턴은 소프트웨어 개발에서 사용되는 구조화된 아키텍처이며, 사용자 인터페이스와 비즈니스 로직의 분리를 돕습니다. MVP 패턴은 애플리케이션의 각 부분이 서로에게 최소한의 의존성을 갖게 함으로써 변경 및 유지 관리에 용이한 코드를 얻을 수 있다는 이점이 있습니다.

 

출처: https://blog.dramancompany.com/2016/08/안드로이드에-테스트-도입하기/

 

 

  • Model: 애플리케이션의 데이터 및 비즈니스 로직을 담당합니다. Model은 데이터에 접근하고 처리하는 메서드와, 비즈니스 로직을 수행하는 메서드를 구현합니다. 이러한 메서드는 각종 데이터 소스, API 호출 및 내부 연산에 대 인터페이스를 제공하게 됩니다.
  • View: View는 사용자 인터페이스와 관련된 모든 것을 담당할 책임이 있습니다. 이는 화면에 표시되는 요소들을 렌더링 하고, 사용자 입력을 감지하여 적절한 이벤트를 발생시키는 역할을 수행합니다. View는 사용자 로직과는 독립적이어야 하고, 직접 Model에 접근해서는 안 됩니다. 대신 Presenter를 사용하여 Model과의 통신을 수행합니다.
  • Presenter: Presenter는 Model과 View 사이를 연결하, 이 두 요소 사이의 작업 흐름을 관리합니다. 사용자의 입력을 처리하기 위해 View에서 받은 이벤트를 처리하고, Model에 로직을 요청합니다. Model 결과를 받은 후에는 이를 사용하여 View를 업데이트하게 됩니다. 이 부분에서 View와 Model 사이의 의존성이 최소화됩니다.

요약하면, MVP 디자인 패턴은 애플리케이션의 각 부분을 역할에 따라 분리함으로써 개발 및 유지 관리를 쉽게 할 수 있는 아키텍처입니다. 이러한 패턴을 사용하면 프로젝트의 가독성 및 확장성이 높아지므로 다양한 규모의 프로젝트에서 찾아볼 수 있습니다.

MVVM 패턴과의 차이

Presenter와 ViewModel 모두 View와 Model 사이의 의존성을 낮추는 것이 주목적이지만, 이들이 View와 상호 작용하는 방식에서 차이가 있습니다.

  • MVP의 Presenter는 View와 직접적으로 연결되어 있고, protocol을 통해 상호작용합니다. 이를 통해 구체적인 View 구현에 대한 의존성을 줄입니다. MVP 패턴에서는 데이터 바인딩을 지원하지 않습니다. 대신, 모든 UI 업데이트를 명시적으로 수행해야 합니다. 이는 코드량의 증가와 적용 시점 통제 가능성을 가지고 있습니다. Presenter는 특정 View에 맞춰 작성되고 그에 관련된 로직을 포함하게 되므로 재사용성이 비교적 제한적입니다.
  • MVVM의 ViewModel은 View와 직접적으로 연결되어있지 않고 대신 View와 데이터 바인딩을 통해 상호 작용합니다. View와 양방향 데이터 바인딩을 관리하며, 이를 통해 UI 업데이트를 자동화하고 간결한 코드를 작성할 수 있으나, 바인딩이 복잡해질수록 디버깅이 어려워질 수 있습니다. View와 직접적으로 연결되어 있지 않고 Model과 연계된 코드만 포함할 가능성이 높습니다. 이런 구조 덕분에 프로젝트 내 다양한 View에 걸쳐 재사용하기 더 쉽습니다.

MVC 패턴과의 차이

  • MVP 패턴에서 Presenter는 View의 protocol을 참조합니다. 이는 구체적인 View 구현에 의존하지 않고, View와의 소통은 protocol을 통해서만 이루어집니다. 때문에 실제 View 구현체를 사용하지 않고 protocol을 구현한 테스트용 가짜 객체를 사용해 독립적으로 단위테스트가 용이해지고 유지보수도 편리하게 할 수 있습니다. 뷰의 변경에도 Presenter를 수정할 필요가 없어집니다. 또한 동일한 protocol을 구현하는 새로운 View 구현을 추가할 경우에도 Presenter 코드에 영향이 없습니다.
  • MVC 패턴에서 Controller는 View를 직접 참조합니다. 이는 Controller가 구체적인 View 구현에 의존하게 되어, View나 Controller의 변경에 따라 서로의 수정이 필요할 수 있습니다. 이로 인해 코드 유지보수와 확장성 측면에서 불리한 점이 있을 수 있으며, View와 Model 사이의 분리가 MVP 패턴에 비해 상대적으로 덜 명확해질 수 있습니다.

 

 

 

반응형

'iOS' 카테고리의 다른 글

Swift @main  (0) 2023.06.07
App Thinning  (0) 2023.06.05
@StateObject, @ObservedObject, @EnvironmentObject 비교  (0) 2023.06.03
데이터 바인딩(Data Binding)  (0) 2023.06.02
SwiftUI @State  (0) 2023.06.01