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
- 패스트캠퍼스후기
- 디자인 트렌드
- 패캠챌린지
- 코드리팩토링
- viewDidLoad
- 머티리얼 디자인
- 아이폰
- Git Tutorial
- ios
- 직장인자기계발
- 플랫디자인
- iOS앱개발올인원패키지Online.
- 직장인인강
- commit
- 입력 개수 제한
- viewDidAppear
- SWIFT
- commit messages
- Xcodebuild
- coordinator pattern
- 8 그리드 시스템
- commit message
- 포인트
- 뉴북
- git
- 패스트캠퍼스
- git workflow
- 뉴모피즘
- 스큐어모피즘
- 픽셀
Archives
- Today
- Total
왕논의 연구실
ViewModel의 위치? View vs ViewController 본문
반응형
🔍 두 방식의 차이 요약
구분 | ViewModel을 ViewController에서 주입 | ViewModel을 View에서 직접 참조 |
구조 | ViewController가 View와 ViewModel을 연결 | View가 ViewModel을 직접 소유 |
장점 | 역할 분리 명확, 테스트 용이 | 코드가 간결하고 SwiftUI에 가까움 |
단점 | 코드가 장황해질 수 있음 | View가 똑똑해지고 재사용성 저하 |
흔한 사례 | UIKit, 전통적 MVVM | SwiftUI, 간단한 화면 구성 |
아키텍처적 해석 | MVVM with Coordinator / Clean Architecture | Passive MVVM or MVVM-ish |
🎯 각 방식의 코드 구조와 의미
1. ViewModel을 ViewController에서 관리 (전통적 MVVM)
class MyViewController: UIViewController {
let viewModel = MyViewModel()
override func viewDidLoad() {
super.viewDidLoad()
myView.label.text = viewModel.title
viewModel.onUpdate = { [weak self] in
self?.myView.updateUI()
}
}
}
- 구조적 이점: View는 dumb하게 유지, ViewModel의 로직 테스트 가능
- 아키텍처: MVVM(C) 또는 Clean Architecture 스타일
- 단점: 연결 코드 많고 번잡해짐
2. View 내부에 ViewModel을 직접 주입 (MVVM-ish, 특히 SwiftUI에서 흔함)
class MyView: UIView {
var viewModel: MyViewModel! {
didSet {
label.text = viewModel.title
}
}
}
- 장점: 코드가 직관적이고 간결
- 단점: View가 로직을 갖기 시작함 → 테스트 어려움, 재사용성 떨어짐
- 아키텍처: MVVM을 간단히 구현한 "MVVM Lite" 혹은 "Passive MVVM"
🏛️ 아키텍처 관점에서 해석하면...
방식 | 의미 | 아키텍처 패턴명 |
ViewModel을 ViewController에서 연결 | 뷰는 Dumb하게 유지하고 ViewModel은 외부에서 주입 | MVVM with Coordinator / Clean MVVM |
View가 ViewModel을 직접 가짐 | 구조는 MVVM처럼 보이나 실질적으로는 MVP나 MVC와 유사 | Passive MVVM, or MVVM-ish |
✅ 어떤 걸 써야 할까?
상황 | 추천 방식 |
UIKit 기반 앱에서 복잡한 화면, 테스트 고려 | ViewModel 주입은 ViewController에서 |
SwiftUI 또는 간단한 화면 | View에서 ViewModel을 직접 참조해도 OK |
View 재사용성이 중요한 경우 | View는 Dumb하게 유지 (ViewModel 접근 X) |
🔚 결론
MVVM의 핵심은 구조의 명확한 책임 분리입니다.
View는 ‘어떻게 보여줄지’, ViewModel은 ‘무엇을 보여줄지’를 담당해야 합니다.
View가 ViewModel을 직접 조작하면 MVC로 퇴화하기 쉽고,
ViewController가 중간에서 연결해주면 아키텍처적으로 명확해집니다.
반응형
'iOS > Swift' 카테고리의 다른 글
iOS에서 UI 변경이 바로 적용되지 않는 이유 (0) | 2025.05.09 |
---|---|
swift의 소유권 개념 (0) | 2025.04.28 |
iOS 화면 구성 시 자주 사용하는 Override 함수 정리 (UIView / UIViewController) (0) | 2025.04.19 |
CoreBluetooth - 입문 (0) | 2025.04.17 |
Swift XCTest 정리 - 입문 (0) | 2025.04.15 |