MVVM 패턴

JG Ahn·2025년 1월 9일

iOS

목록 보기
18/32
post-thumbnail

MVC는 Apple에서 기본적으로 지원하고 있는 패턴이며 간단하고 직관적인 구조를 갖고있어 작은 프로젝트에서는 쉽고 빠르게 개발할 수 있다. 하지만 MVC는 모든 로직이 Controller에 집중되면서 비대해지고 유지보수가 어려워지는 단점이 있다. 이러한 MVC의 단점을 보완하기 위해 주목받게 된 패턴이 MVVM이다.

MVVM 패턴이란?

앱 구조를 3가지 주요 컴포넌트로 나눈 설계 패턴이다.

  • Model : 앱에서 사용되는 데이터 구조
  • View : UI. ViewModel과 바인딩되어 화면을 정의
  • ViewModel : View와 Model 사이에서 중재자 역할을 하며 UI 로직과 데이터 변환을 처리

MVVM 패턴의 장점과 단점

장점

  • 컨트롤러의 역할을 줄여 코드가 모듈화되고 가독성이 좋아진다. 따라서 자연스럽게 유지보수가 용이하다.
  • ViewModel을 재사용해서 다른 View에서 쉽게 활용할 수 있다.
  • View와 ViewModel이 독립적이기 때문에 ViewModel에서 데이터 흐름을 파악하고 테스트 하기가 간편해진다.

단점

  • 데이터 바인딩에 대한 지식이 필요해 설계가 복잡하다.
  • 비즈니스 로직이 복잡할 경우 ViewModel의 크기가 비대해질 수 있다.

대략적인 MVVM 패턴이 적용된 프로젝트의 파일구조

MyProject/
│
├── Models/
│   ├── User.swift
│   ├── Product.swift
│   └── (데이터 및 비즈니스 로직 관련 파일들)
│
├── ViewModels/
│   ├── UserViewModel.swift
│   ├── ProductViewModel.swift
│   └── (ViewModel 관련 파일들)
│
├── Views/
│   ├── UserView.swift
│   ├── ProductView.swift
│   └── (UI 관련 파일들)
│
├── Services/
│   ├── NetworkService.swift
│   ├── APIClient.swift
│   └── (API 통신, 데이터베이스 등 공통 서비스)
│
├── Utilities/
│   ├── Constants.swift
│   ├── Extensions/
│   │   ├── UIView+Extension.swift
│   │   └── String+Extension.swift
│   └── (공통 유틸리티 및 확장 함수)
│
└── App/
    ├── AppDelegate.swift
    ├── SceneDelegate.swift
    └── (앱 전체 구성 관련 파일들)

UITableView를 사용하는 경우

MyProject/
├── Models/
│   ├── User.swift
│
├── ViewModels/
│   ├── UserViewModel.swift
│   ├── UserCellViewModel.swift   # 각 셀의 데이터를 관리하는 ViewModel
│
├── Views/
│   ├── UserView.swift            # UITableView가 포함된 메인 View
│   ├── Cells/
│   │   ├── UserTableViewCell.swift # UITableViewCell 클래스
│   └── UserViewController.swift  # UIKit 기반 ViewController
│
├── Services/
│   └── NetworkService.swift

0개의 댓글