Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
Tags
- Xcodebuild
- 포인트
- 입력 개수 제한
- 뉴북
- coordinator pattern
- commit messages
- SWIFT
- 뉴모피즘
- 직장인인강
- git workflow
- viewDidLoad
- 플랫디자인
- 스큐어모피즘
- 패스트캠퍼스
- 머티리얼 디자인
- iOS앱개발올인원패키지Online.
- 아이폰
- commit
- git
- 패스트캠퍼스후기
- 8 그리드 시스템
- ios
- 디자인 트렌드
- commit message
- 직장인자기계발
- 픽셀
- viewDidAppear
- 코드리팩토링
- Git Tutorial
- 패캠챌린지
Archives
- Today
- Total
왕논의 연구실
MVVM (Model-View-ViewModel) 본문
반응형
MVC에서 이어서 말하자면 MVC로 작성하다보면 ViewController가 굉장히 커집니다.
🔁 해결 방향 – ViewModel의 등장
이 문제를 해결하기 위해 등장한 게 바로 MVVM입니다.
핵심은 단순합니다:
“Controller(UI)는 단순히 보여주기만 하고,
모든 데이터/로직은 ViewModel이 관리하자.”
즉, ViewController의 역할을 최대한 줄이자는 겁니다.
🧠 MVVM 구조 핵심
- Model: 데이터
- View: UI
- ViewModel: View가 표시할 데이터를 가공하고, 이벤트를 처리
UI와 ViewModel은 바인딩(binding) 으로 연결됩니다.
즉, ViewModel 값이 바뀌면 UI가 자동으로 업데이트됩니다.
구분MVCMVVM
| 핵심 역할 | Controller가 모든 걸 담당 | ViewModel이 데이터 가공 담당 |
| 의존 방향 | View ↔ Controller ↔ Model | View ↔ ViewModel ↔ Model |
| UI 업데이트 | 수동으로 updateUI() 호출 | 바인딩으로 자동 반영 |
| 테스트 용이성 | 어려움 | ViewModel만 테스트 가능 |
| 주요 도구 | UIKit, delegate | Combine, RxSwift 등 |
🧩 예시: 카운터 앱에서의 변화
MVC
@objc func increase() {
count += 1 label.text = "\(count)"
}
MVVM
viewModel.$countText
.assign(to: \.text, on: label)
.store(in: &cancellables)
👉 count 값이 바뀌면 label이 자동으로 업데이트됩니다.
이게 바로 “ViewController의 부담을 줄이는” 구조입니다.
기존의 ViewController에 다 작성하는 방식에서 ViewModel로 로직을 구현하고 Controller에서 연결하는 방식으로 작성됩니다.
하지만 MVVM도 문제가 생기는데요. MVC와 같이 Massive ViewModel이 되어버린다는 겁니다. 결국 MVC의 Controller 의 역할을 ViewModel이 대부분 가져가면서 똑같은 문제가 발생하게 됩니다.
MVC → MVVM으로 바뀐 이유
| 1️⃣ Massive ViewController | 화면 하나에 모든 로직이 몰림 |
| 2️⃣ 테스트 어려움 | UI와 비즈니스 로직이 결합 |
| 3️⃣ 데이터 반응형 업데이트 필요 | RxSwift / Combine 등 리액티브 도입 |
| 4️⃣ 역할 분리 | View는 UI, ViewModel은 데이터 로직 담당 |
반응형
'iOS > Swift' 카테고리의 다른 글
| RIBs (0) | 2025.12.11 |
|---|---|
| VIPER (0) | 2025.12.06 |
| MVC (Model - View - Controller) (0) | 2025.12.04 |
| iOS에서 UI 변경이 바로 적용되지 않는 이유 (0) | 2025.05.09 |
| ViewModel의 위치? View vs ViewController (0) | 2025.05.07 |