ย MVVM-C ํจํด
MVVM-C ํจํด์ iOS ๊ฐ๋ฐ์์ ์์ฃผ ์ฌ์ฉ๋๋ ๋์์ธ ํจํด์ผ๋ก MVVM ๊ณผ Coordinator ๋ฅผ ๊ฒฐํฉํ ํํ์ด๋ค.
์ด ํจํด์ ์ฑ์ ๊ตฌ์กฐ๋ฅผ ๋์ฑ ๋ช
ํํ๊ณ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํ๊ฒ ๋ง๋ค์ด ์ฃผ๋ฉฐ, ํนํ ํฐ ํ๋ก์ ํธ๋ ์ฌ๋ฌ ๊ฐ๋ฐ์๊ฐ ํ์
ํ ๋ ์ ์ฉํ๋ค.
ย MVVM-C ๊ตฌ์ฑ์์
Model
โข
๋ฐ์ดํฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋นํ๋ค.
โข
์ฑ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ก์ง์ ํฌํจํ๋ค.
View
โข
์ฌ์ฉ์์ ์ธํฐํ์ด์ค(UI)๋ฅผ ๋ด๋นํ๋ค.
โข
์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ ์์๋ค(๋ฒํผ, ํ
์คํธ๋ทฐ ๋ฑ)์ด ์ด๊ณณ์ ํฌํจ๋๋ค.
ViewModel
โข
View์ Model ์ฌ์ด์ โ์ค๊ฐ์โ ์ญํ ์ ํ๋ค.
โข
View์ ํ์๋ ๋ฐ์ดํฐ๋ฅผ ์ค๋นํ๊ณ , ์ฌ์ฉ์์ ์ก์
์ ๋ฐ๋ผ Model์ ์
๋ฐ์ดํธํ๋ค.
โข
ViewModel์ View์ ์ํ์ ๋ก์ง์ ๊ฐ์ง์ง๋ง, ์ง์ ์ ์ผ๋ก View๋ฅผ ์ฐธ์กฐํ์ง๋ ์๋๋ค.
Coordinator
โข
์ฑ์ ๋ค๋น๊ฒ์ด์
๊ณผ ํ๋ฉด ์ ํ์ ๋ด๋นํ๋ค. ๊ฐ ํ๋ฉด(๋ทฐ)์ ๋ํ ์ด๋ ๋ก์ง๊ณผ ํ๋ฆ์ ๊ด๋ฆฌํ์ฌ,
โข
View์ ViewModel์ด ๋ค๋น๊ฒ์ด์
์ ๊ด๋ จ๋ ๋ก์ง์ ๊ฐ์ง์ง ์๋๋ก ๋์์ค๋ค.
ย MVVM-C ํจํด์ ์ฅ์
๋ถ๋ฆฌ๋ ๊ด์ฌ์ฌ
โข
๊ฐ ์ปดํฌ๋ํธ(๋ชจ๋ธ, ๋ทฐ, ๋ทฐ๋ชจ๋ธ, ์ฝ๋๋ค์ดํฐ)๋ ์์ ์ ์ญํ ์๋ง ์ง์คํ์ฌ, ์ฝ๋์ ์ ์ง๋ณด์์ ํ
์คํธ๊ฐ ์ฉ์ดํด์ง๋ค.
์ฌ์ฌ์ฉ์ฑ ๋ฐ ํ์ฅ์ฑ
โข
์ปดํฌ๋ํธ๋ค์ด ๋ถ๋ฆฌ๋์ด ์์ด ์ฌ์ฌ์ฉ์ฑ์ด ๋๊ณ , ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ ์ฝ๋ค.
ํ ์คํธ ์ฉ์ด์ฑ
โข
ViewModel์ View์ ์์กดํ์ง ์์ผ๋ฏ๋ก, UI์ ๋ถ๋ฆฌํ์ฌ ํ
์คํธํ๊ธฐ ์ฝ๋ค.
๋ค๋น๊ฒ์ด์ ๊ด๋ฆฌ
โข
Coordinator๋ฅผ ํตํด ๋ค๋น๊ฒ์ด์
๋ก์ง์ ๋ถ๋ฆฌํจ์ผ๋ก์จ, ๋ทฐ์ปจํธ๋กค๋ฌ์ ๋ถ๋ด์ ์ค์ด๊ณ ์ ์ฐํ ๋ค๋น๊ฒ์ด์
๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ง๋ค.
ย MVVM-C ํจํด์ ๋จ์
๋ณต์ก์ฑ
โข
๋จ์ํ ์ฑ์ ๋ํด์ ์ค๋ฒ์์ง๋์ด๋ง์ผ ์ ์์ผ๋ฉฐ, ์ฝ๋๋ค์ดํฐ ํจํด์ ๋์
์ผ๋ก ์ธํด ์ํคํ
์ฒ๊ฐ ๋ณต์กํด์ง ์ ์๋ค.
ํ์ต ๊ณก์
โข
์ด ํจํด์ ์ฒ์ ์ ํ๋ ๊ฐ๋ฐ์์๊ฒ๋ ํ์ต ๊ณก์ ์ด ์์ ์ ์๋ค.
๊ทธ๋ฌ๋ฉด MVVM-C์ Clean Architecture๋ฅผ ๋์
ํ๋๊ฑด ๊ด์ฐฎ์๊น?
ย MVVM-C์ ํด๋ฆฐ ์ํคํ ์ฒ์ ๊ฒฐํฉ ์ด์
๊ฐํ๋ ๋ถ๋ฆฌ ๋ฐ ์ถ์ํ
โข
ํด๋ฆฐ ์ํคํ
์ฒ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ๋ฌ ๊ณ์ธต์ผ๋ก ๋๋์ด ๊ฐ ๊ณ์ธต์ ์ฑ
์์ ๋ช
ํํ ํ๋ค.
โข
์ด๋ MVVM-C์ ๊ตฌ์ฑ์์์ ์ ์ด์ธ๋ ค, ์ฝ๋์ ์์กด์ฑ์ ๋์ฑ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๊ฒ ํ๋ค.
ํ ์คํธ ์ฉ์ด์ฑ
โข
ํด๋ฆฐ ์ํคํ
์ฒ๋ ๋
๋ฆฝ์ ์ธ ํ
์คํธ๋ฅผ ์ค์ํ๋ค.
โข
MVVM-C์์ ViewModel์ ํ
์คํธ๊ฐ ์ฉ์ดํ ๊ฒ ์ฒ๋ผ, ํด๋ฆฐ ์ํคํ
์ฒ๋ฅผ ๋์
ํ๋ฉด ๋ชจ๋ ๊ณ์ธต์์์ ๋
๋ฆฝ์ ์ธ ์ ๋ ํ
์คํธ๊ฐ ๊ฐ๋ฅํด์ง๋ค.
์ ์ฐํ ๋ค๋น๊ฒ์ด์ ๊ด๋ฆฌ
โข
MVVM-C์์ Coordinator๋ ๋ค๋น๊ฒ์ด์
๋ก์ง์ ๊ด๋ฆฌํ๋ค.
โข
ํด๋ฆฐ ์ํคํ
์ฒ๋ฅผ ์ ์ฉํ๋ฉด, ์ด๋ฌํ ๋ค๋น๊ฒ์ด์
๊ด๋ฆฌ๊ฐ ๋์ฑ ์ฒด๊ณ์ ์ด๊ณ ์ ์ฐํ๊ฒ ์ด๋ฃจ์ด์ง ์ ์๋ค.
์ ์ง๋ณด์์ ํ์ฅ์ฑ ํฅ์
โข
ํด๋ฆฐ ์ํคํ
์ฒ๋ ์ฝ๋์ ์ ์ง๋ณด์์ ํ์ฅ์ฑ์ ํฌ๊ฒ ํฅ์์ํจ๋ค.
โข
๊ฐ ๊ณ์ธต์ด ๋ช
ํํ ๋ถ๋ฆฌ๋์ด ์์ด ๋ณ๊ฒฝ ์ฌํญ์ด ๋ค๋ฅธ ๊ณ์ธต์ ๋ฏธ์น๋ ์ํฅ์ ์ต์ํํ๋ค.
๊ธฐ์ ์ ๋ถ์ฑ ๊ฐ์
โข
์ฅ๊ธฐ์ ์ธ ๊ด์ ์์ ํด๋ฆฐ ์ํคํ
์ฒ๋ฅผ ๋์
ํ๋ฉด ๊ธฐ์ ์ ๋ถ์ฑ๋ฅผ ์ค์ด๊ณ , ๋ ๊ฑด๊ฐํ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ ์งํ ์ ์๋ค.
๊ณ ๋ คํด์ผํ ์
โข
๋ณต์ก์ฑ
โฆ
ํด๋ฆฐ ์ํคํ
์ฒ๋ ๊ฐ๋
์ ์ผ๋ก ๋ณต์กํ๋ฉฐ, ํ๋ก์ ํธ ์ด๊ธฐ์๋ ๊ตฌ์ถ์ด ์ด๋ ค์ธ ์ ์๋ค.
โฆ
์์ ํ๋ก์ ํธ์์ ์ค๋ฒ์์ง๋์ด๋ง์ผ๋ก ์ด์ด์ง ์ ์๋ค.
โข
ํ์ต ๊ณก์
โฆ
ํด๋ฆฐ ์ํคํ
์ฒ์ ์์น๊ณผ ํจํด์ ์ดํดํ๊ณ ์ ์ฉํ๋ ๋ฐ ์๊ฐ์ด ํ์ํ๋ค. ํ์ ๋ชจ๋๊ฐ ์ด๋ฌํ ์ํคํ
์ฒ์ ์ต์ํด์ ธ์ผ ํ๋ค.
ย MVVM-C + Clean Architecture ๊ธฐ๋ณธ ํด๋ ๊ตฌ์กฐ
YourApp
โ
โโโ Application
โ โโโ AppDelegate.swift
โ โโโ SceneDelegate.swift
โ
โโโ Core
โ โโโ Extensions
โ โโโ Utilities
โ โโโ Constants
โ
โโโ Data
โ โโโ Repositories
โ โโโ Services
โ โโโ Models
โ
โโโ Domain
โ โโโ Entities
โ โโโ UseCases
โ โโโ Protocols
โ
โโโ Presentation
โ โโโ Views
โ โ โโโ ViewControllers
โ โ โ โโโ [ViewControllerName]ViewController.swift
โ โ โโโ Views
โ โ โ โโโ [CustomViewName].swift
โ โ โโโ Cells
โ โ โโโ [CustomCellName].swift
โ โ
โ โโโ ViewModels
โ โ โโโ [ViewModelName].swift
โ โ
โ โโโ Coordinators
โ โโโ [CoordinatorName].swift
โ
โโโ SupportingFiles
โโโ Info.plist
โโโ Assets.xcassets
Shell
๋ณต์ฌ
Core
โข
์ ์ฒด ์ฑ์ ์ ์ฌ์ฉ๋๋ ํ์ฅ, ์ ํธ๋ฆฌํฐ, ์์ ๋ฑ์ ํฌํจํ๋ค.
Data
โข
๋ฐ์ดํฐ ๊ณ์ธต๊ณผ ๊ด๋ จ๋ ์์๋ฅผ ํฌํจํ๋ค.
โข
๋ ํผ์งํ ๋ฆฌ, ์๋น์ค, ๋ชจ๋ธ ๋ฑ์ด ํฌํจ๋๋ค.
Domain
โข
๋น์ฆ๋์ค ๋ก์ง๊ณผ ๊ด๋ จ๋ ์ํฐํฐ, ์ ์ฆ์ผ์ด์ค, ํ๋กํ ์ฝ ๋ฑ์ ํฌํจํ๋ค.
Presentation
โข
UI์ ๊ด๋ จ๋ ๋ชจ๋ ๊ฒ์ ํฌํจํ๋ค.
โข
Views
โฆ
ViewController, Views, Cells
โข
ViewModels
โฆ
๊ฐ ๋ทฐ์ ๋ทฐ๋ชจ๋ธ์ ํฌํจํ๋ค.
โข
Coordinator
โฆ
์ฑ์ ํ๋ฉด ์ ํ๊ณผ ํ๋ฆ์ ๊ด๋ฆฌํ๋ ์ฝ๋๋ค์ดํฐ๋ค์ ํฌํจํ๋ค.
SupportingFiles
โข
Info.plist, Assets.xcassets ๋ฑ์ ํ๋ก์ ํธ๋ฅผ ์ง์ํ๋ ํ์ผ๋ค์ ํฌํจํ๋ค.
ย ์ ๋ฆฌ
MVVM-C ํจํด์ iOS ๊ฐ๋ฐ์์ ๊ท๋ชจ๊ฐ ํฌ๊ณ ๋ณต์กํ ์ฑ์ ๊ฐ๋ฐํ ๋ ๋งค์ฐ ํจ๊ณผ์ ์ธ ๋์์ธ ํจํด์ผ๋ก, ์ฝ๋์ ๊ฐ๋
์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ฌ์ค๋ค.
๋ํ MVVM-C ํจํด์ ํด๋ฆฐ ์ํคํ
์ฒ๋ฅผ ์ ์ฉํ๋ ๊ฒ์ ํ๋ก์ ํธ์ ๋ณต์ก์ฑ, ํ์ ๊ฒฝํ, ๊ทธ๋ฆฌ๊ณ ํ๋ก์ ํธ์ ๊ท๋ชจ๋ฅผ ๊ณ ๋ คํ์ฌ ๊ฒฐ์ ํ๋ ๊ฒ์ด ์ค์ํ๋ค.
์ ๊ตฌํ๋ ๊ฒฝ์ฐ, ์ด ์กฐํฉ์ ์ฑ์ ํ์ฅ์ฑ, ์ ์ง๋ณด์์ฑ ๋ฐ ํ
์คํธ ๊ฐ๋ฅ์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์๋ค.
ํ์ง๋ง ํ๋ก์ ํธ์ ๊ท๋ชจ๋ ํ์ ์ ํธ๋์ ๋ฐ๋ผ ์ ํฉํ ํจํด์ ์ ํํ๋ ๊ฒ์ด ์ค์ํ๋ค.
ย ๋์ ์๊ฐ
์๊ท๋ชจ ํ๋ก์ ํธ - MVC, MVP
์ค์๊ท๋ชจ ํ๋ก์ ํธ - MVVM
์ค๊ท๋ชจ ํ๋ก์ ํธ - MVVM + Clean Architecture
๋๊ท๋ชจ ํ๋ก์ ํธ - MVVM-C + Clean Architecture
ํ๋ก์ ํธ ๊ท๋ชจ์ ์๊ด์์ด ์ ์ฐ์ฑ๊ณผ ํ
์คํธ ์ฉ์ด์ฑ์ ์ค์ํ๋ ๊ฒฝ์ฐ, ๋น๊ต์ ์์ ํ๋ก์ ํธ์์๋ MVVM์ด๋ ํด๋ฆฐ ์ํคํ
์ฒ๋ฅผ ์ฑํํ ์ ์๋ค!