[TIL] MVVM 패턴

Eden·2025년 7월 9일

MVVM(Model-View-ViewModel)은 iOS 개발에서 자주 사용되는 아키텍처 패턴으로, 관심사의 분리를 통해 유지보수성과 테스트 용이성을 높입니다.


1. MVVM이란?

MVVM은 아래 세 가지 구성 요소로 나뉩니다.

구성요소역할
Model앱의 비즈니스 로직 및 데이터 계층
View사용자 인터페이스(UI), 사용자 입력 처리
ViewModelModel과 View 사이의 중개자, UI 로직을 담당

2. 각 구성요소 설명

Model

  • 순수한 데이터 구조 또는 네트워크/DB에서 가져온 데이터를 의미
  • 비즈니스 로직, 데이터 저장 및 처리 담당
struct User {
    let name: String
    let age: Int
}

View

  • 실제 사용자에게 보여지는 화면
  • ViewController, SwiftUI의 View 등이 해당
class UserViewController: UIViewController {
    var viewModel: UserViewModel!

    override func viewDidLoad() {
        super.viewDidLoad()
        viewModel.fetchUser()
    }
}

ViewModel

  • Model을 가공해 View에 필요한 형태로 제공
  • View에 종속되지 않음
  • 주로 Observable, @Published, Closure, RxSwift, Combine 등을 활용해 View에 데이터 바인딩
class UserViewModel {
    var userName: ((String) -> Void)?

    func fetchUser() {
        let user = User(name: "John", age: 25)
        userName?(user.name)
    }
}

3. MVVM의 장점

  • View와 Model의 의존성 제거
  • ViewModel 단위 테스트 가능
  • UI 로직과 비즈니스 로직을 명확히 분리
  • 코드의 재사용성과 유지보수성 향상

4. MVVM의 단점

  • 작은 프로젝트에서는 오히려 복잡도가 증가할 수 있음
  • ViewModel 설계가 복잡해질 수 있음
  • 데이터 바인딩 도구 사용에 대한 러닝커브 존재

5. MVVM 흐름 예시

  1. View가 사용자 입력을 ViewModel에 전달
  2. ViewModel이 Model로부터 데이터를 받아옴
  3. ViewModel이 데이터를 가공하여 View에 전달
  4. View는 ViewModel의 데이터를 바탕으로 UI 업데이트

결론

MVVM은 중대형 iOS 프로젝트에서 코드 구조를 정돈하고 유지보수성을 높이기 위한 효과적인 아키텍처입니다.
Swift에서는 Combine, RxSwift, Closure 등 다양한 방법으로 ViewModel과 View 간의 데이터 바인딩을 구현할 수 있습니다.

profile
iOS Dev

0개의 댓글