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

앱 구조를 3가지 주요 컴포넌트로 나눈 설계 패턴이다.
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
└── (앱 전체 구성 관련 파일들)
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