iOS 아키텍처 패턴 – 3: MVP

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의 장점
- 명확한 분리: MVP는 로직과 UI의 분리를 명확하게 한다. 이로 인해 유닛 테스트가 더 쉬워진다.
- 재사용성: Presenter는 UI 플랫폼에 독립적이므로 다양한 View에서 재사용할 수 있다.
- 유연성: 애플리케이션의 기능 확장이나 변경이 필요할 때, 각 부분을 독립적으로 수정하거나 추가할 수 있다.
마치며
MVP는 iOS 애플리케이션 개발에서 효과적인 아키텍처 패턴 중 하나이다.
MVC나 MVVM과는 다르게, MVP는 View와 로직을 더욱 철저하게 분리하여 개발 및 테스팅의 효율성을 높인다.
iOS 개발을 공부하는 개발자들에게 MVP 패턴의 적용은 필수적인 경험이 될 것이다.
