
참말로 헷갈리는 MVVM 패턴
기존에 MVC로 되어있던 내 프로젝트를 MVVM으로 리팩토링 하는 중에
MVVM을 제대로 이해하지 못하고 코드만 바꿔대고 있는거 같아 다시 해보는 공부..
Model: 데이터와 비즈니스 로직의 원천
Model 계층은 애플리케이션의 데이터와 그 데이터를 처리하는 핵심 규칙을 담고 있습니다.
View: 데이터의 시각적 표현 및 사용자 입력
View는 비즈니스 로직을 가져서는 안 됩니다. 예를 들어, 데이터를 포맷팅하거나 조건에 따라 계산하는 로직은 View에 존재해서는 안 되며, 오직 ViewModel이 가공해준 데이터를 보여주는 역할에만 충실해야 합니다.
ViewModel: View를 위한 추상화된 모델
MVVM의 중추인 ViewModel은 View를 위한 Model(Model for View)입니다. Model이 가진 순수 데이터를 View가 보여주기 편한 형태로 변환하고, View의 상태를 관리하는 역할을 수행합니다.
신입 개발자가 주의해야 할 안티 패턴 (Anti-Patterns)
MVVM을 처음 학습하고 적용할 때 흔히 저지르는 실수들과 그 해결책을 정리합니다.
1. ViewModel 내부의 UIKit 참조
- 실수: ViewModel 파일 상단에 import UIKit을 선언하고, UIImage, UIFont, UIColor 등을 ViewModel의 속성으로 가지는 경우.
- 문제점: ViewModel이 View의 구현 디테일에 종속됩니다. 이는 테스트를 어렵게 만들고(UIKit은 메인 스레드 의존적), ViewModel의 순수성을 해칩니다.
- 해결: ViewModel은 데이터(String, Data, HexCode)만 반환하고, View가 이를 받아서 UI 객체(UIImage, UIColor)로 변환하도록 합니다.
2. Massive ViewModel
- 실수: ViewController의 코드를 그대로 ViewModel로 옮기기만 하는 경우. 로직 분리 없이 위치만 이동시킨 것은 "쓰레기를 다른 서랍으로 옮기는 것"과 같습니다.
- 문제점: ViewModel 자체가 수천 줄이 되어 유지보수가 어려워집니다.
- 해결: ViewModel은 **프레젠테이션 로직(Presentation Logic)**만 담당해야 합니다.
- 데이터 포맷팅 -> Formatter
- 네트워크 통신 -> Service / Repository
- 데이터 저장 -> Storage 로 역할을 더 잘게 쪼개야 합니다.
3. 순환 참조 (Retain Cycle)
- 실수: 클로저나 Combine의 sink, assign 내부에서 self를 강하게 참조(Strong Reference)하는 경우.
- 문제점: View와 ViewModel이 서로를 붙잡고 놓아주지 않아 메모리 누수(Memory Leak)가 발생합니다. 앱이 종료될 때까지 메모리가 해제되지 않습니다.
- 해결: 반드시 [weak self]를 사용하여 약한 참조(Weak Reference)로 캡처해야 합니다.
이걸 머릿속에 넣어야 하는데 !
어렵군???
'TIL' 카테고리의 다른 글
| 251208 TIL 싱글톤 패턴 (0) | 2025.12.08 |
|---|---|
| 251205 TIL ActivityIndicator (0) | 2025.12.05 |
| 250812 TIL | 사용자의 위치로 카메라 이동하기, 지도 중앙값 받아와서 데이터 넘겨주기 (2) | 2025.08.12 |
| 250810 TIL | swift 네이버 지도 현재 위치 버튼 활성화하기 (2) | 2025.08.10 |
| 250807 | 마커 등록 화면 UI 구성 (FlexLayout + NMFMapView + 태그 영역 레이아웃 작업) (0) | 2025.08.07 |
댓글