MVP

iOS 아키텍처 패턴 – 3: MVP

a blurry image of a computer screen with text

iOS 애플리케이션 개발은 수많은 디자인 패턴과 아키텍처 스타일로 이루어진다.

MVVM와 MVC에 이어, MVP (Model-View-Presenter)는 iOS 개발에서 사용되는 또 다른 중요한 패턴 중 하나이다.

이 글에서는 MVP 패턴의 핵심 개념과 Swift 예제 코드를 통해 이 아키텍처의 매력을 소개한다.

MVP란?

MVP는 Model, View, Presenter의 약자로, 이 세 가지 구성 요소로 애플리케이션을 구조화하는 디자인 패턴이다.

  • Model: 데이터와 비즈니스 로직을 담당한다.
  • View: 사용자에게 보여지는 UI 요소이다. 사용자의 입력을 받아 Presenter에 전달한다.
  • Presenter: View와 Model 사이의 중재자 역할을 하며, 로직을 수행하고 View에 결과를 전달한다.

Swift 예제로 MVP 이해하기

1. Model

struct Task {
    let title: String
    var isCompleted: Bool
}

2. View

protocol TaskViewProtocol: AnyObject {
    func displayTasks(_ tasks: [Task])
}

3. Presenter

class TaskPresenter {
    weak var view: TaskViewProtocol?
    var tasks: [Task] = []

    func addTask(title: String) {
        let newTask = Task(title: title, isCompleted: false)
        tasks.append(newTask)
        view?.displayTasks(tasks)
    }

    func toggleTaskCompletion(at index: Int) {
        tasks[index].isCompleted.toggle()
        view?.displayTasks(tasks)
    }
}

4. View Implementation

UIKit을 사용하여 간단한 예제를 구현했다.

import UIKit

class TaskViewController: UIViewController, TaskViewProtocol {
    var presenter: TaskPresenter?

    // TableView, Buttons, 등의 UI 요소 선언.

    func displayTasks(_ tasks: [Task]) {
        // 주어진 tasks 파라미터를 통해 UI를 업데이트 한다.
    }

    // 사용자 상호 작용을 처리하고 적절한 발표자 메서드를 호출한다.
}

MVP의 장점

  1. 명확한 분리: MVP는 로직과 UI의 분리를 명확하게 한다. 이로 인해 유닛 테스트가 더 쉬워진다.
  2. 재사용성: Presenter는 UI 플랫폼에 독립적이므로 다양한 View에서 재사용할 수 있다.
  3. 유연성: 애플리케이션의 기능 확장이나 변경이 필요할 때, 각 부분을 독립적으로 수정하거나 추가할 수 있다.

마치며

MVP는 iOS 애플리케이션 개발에서 효과적인 아키텍처 패턴 중 하나이다.

MVC나 MVVM과는 다르게, MVP는 View와 로직을 더욱 철저하게 분리하여 개발 및 테스팅의 효율성을 높인다.

iOS 개발을 공부하는 개발자들에게 MVP 패턴의 적용은 필수적인 경험이 될 것이다.