๋ฉด์ ์ค๋น์ฉ MVVM - Android ์ ๋ฆฌ (๋งจ ์๋์ ๋ ํผ๋ฐ์ค๋ค์ ๊ผญ ํ์ธํด์ฃผ์ธ์.)
MVC
- ๊ตฌ์ฑ : Model, View(์ ์ ๊ฐ ๋ณด๊ณ ์๋ ํ๋ฉด), Controller
- ํ๋ฆ : Controller์์ ์ด๋ฒคํธ ๋ฐ์ → ์ด๋ฒคํธ์ ๋ฐ๋ผ Model ์ ๋ฐ์ดํธ๋ฅผ ์์ฒญ → View์ ์ ๋ฌ → View๋ Model์ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐ์์ ๊ฐฑ์
- View, Controller์ ๋ก์ง์ด ์ดํฉ๋์ด ์์ด ํ ์คํธ ์ฝ๋ ์์ฑ์ด ์ฝ์ง ์์. ๋ํ ์ด๋ ๊ฒ ๊ตฌํํ ์ฝ๋์ ํน์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ค๊ณ ํด๋ ์ด๋ ค์์ด ์์.
MVP
- ๊ตฌ์ฑ : Model, View, Presenter(View์์ ์์ฒญํ ์ ๋ณด๋ฅผ Model๋ก๋ถํฐ ๊ฐ๊ณตํ์ฌ ๋ทฐ๋ก ์ ๋ฌ)
- ํ๋ฆ : ์ฌ์ฉ์์ ์ก์ ์ View๋ก๋ถํฐ ๋ฐ์ → View๋ ๋ฐ์ ์ด๋ฒคํธ๋ฅผ Presenter๋ก ๋๊น → Presenter์์ Model๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฒญ → Model์ repo๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ณ Presenter๋ก ๋๊น → Presenter์์ ๊ฒฐ๊ณผ๋ฅผ View๋ก ํต๋ณด → View ์ ๋ฐ์ดํธ
- Presenter๊ฐ View, Model ์ฌ์ด๋ฅผ ์๋ ๊ฐ๊ต ์ญํ ์ ํ๋ฏ๋ก View์ Model ์ฌ์ด์ ๊ฒฐํฉ๋๊ฐ ๊ฐํ๋ MVC์ ๋จ์ ์ ๊ทน๋ณต.
- ๊ทธ๋ฌ๋ Presenter์ View๋ 1:1 ๋จ๊ณ์. ๋ฐ๋ผ์ View์ Presenter ์ฌ์ด์ ์์กด์ฑ์ด ๊ฐํจ.
MVVM
- ๊ตฌ์ฑ : Model, View, ViewModel
- View : Activity๊ฐ ์ํจ. DataBinding, ViewBinding ์ฌ์ฉํด๋ Controller๊ฐ ํฌํจ๋์ด View์ ํด๋นํจ.
- ViewModel : ๋น์ง๋์ค ๋ก์ง์ ์ฒ๋ฆฌํจ. ํ์ํ ํต์ง๋ง ๋ฐ์์ ์ฒ๋ฆฌํด์ฃผ์ด์ผ ํจ.
- ์ฌ๊ธฐ์ ์๊ธฐ๋ ๊ณ ๋ฏผ - ์ด ์ฝ๋๋ฅผ ๋ถ๋ฆฌํด์ผ ํ๋๊ฐ? ์ฆ, ๋จ์ํ ๋ฒํผ ์ด๋ฒคํธ๋ก ๋ทฐ์ ๊ฐ๋จํ ๋ถ๋ถ๋ง ๋ฐ๋๋๋ฐ ์ด๊ฑธ ๋๊ฒจ์ผ ๋๋? ์ด๋ฐ ๊ณ ๋ฏผ๋ค์ด ๋ฐ์ํ๊ฒ ๋จ.
- ํ๋ฆ : view์์ ์ด๋ฒคํธ ๊ฐ์ง → viewmodel์์ ์ด๋ฒคํธ์ ๊ด๋ จ๋ model์ ๋ฉ์๋ ํธ์ถ → model์ ํธ์ถ๋ ๋ฉ์๋๊ฐ ์์ ํ ๊ฐ ๋ฆฌํด → viewmodel์ ํธ์ถํ ๋ฉ์๋๋ก๋ถํฐ ๋ฐ์ ๊ฒฐ๊ณผ๋ฅผ livedata์ ์ ์ฅ → view์์ livedata์ ๋ณ๊ฒฝ ๊ฐ์งํด์ ํด๋น ๊ฐ์ผ๋ก ๋ทฐ์ ๊ฐฑ์
ViewModel?
ViewModel์ ๋ชฉํ๋ ๋ค์๊ณผ ๊ฐ์
- ์ฝ๋์ ๋ถ๋ฆฌ
- ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๋์ ๊ฐ๋ฅ์ฑ
- ํ ์คํธ๋ฅผ ํตํด ๋ก์ง์ ๋ํ ์ค๋ฅ ์์ธก
์ฆ ์ด์์ ์ธ ๋ทฐ๋ชจ๋ธ์ ๊ตฌํํ๋ ค๋ฉด ๋ก์ง ๋ถ๋ฆฌ + ์ ๋ ํ ์คํธ ๊ฐ๋ฅ๊น์ง ๊ณ ๋ คํด์ค์ผ ํจ. ๋ทฐ๋ชจ๋ธ์ ๋ชจ๋ ํจ์๊ฐ ํ ์คํธ ๊ฐ๋ฅํ๋๋ก ๊ตฌํ์ด ๋์ด์ผ ํจ.
viewmodel์๋ context๋ฅผ ๋๊ธฐ์ง ์๋ ๊ฒ์ด ์ข์. ๊ฐ์ฅ ํฐ ์ด์ ๋ ์๋ช ์ฃผ๊ธฐ๊ฐ ๋ค๋ฅด๋ค๋ ์ ์ด ์์. ์ ์ฌ์ง๊ณผ ๊ฐ์ด ๋ทฐ๋ชจ๋ธ์ ์๋ช ์ฃผ๊ธฐ๋ ๋ทฐ์ ์๋ช ์ฃผ๊ธฐ์ ๋ค๋ฆ. ๋ทฐ์ ์๋ช ์ฃผ๊ธฐ๊ฐ ๋๋ฌ๋๋ฐ viewmodel์ Activity/Fragment์์ ํ ์ ์๋๊ฑธ ๋ชจ๋ ์ ๊ทผํ ์ ์๋ context๋ฅผ ๋๊ธฐ๊ฒ ๋๋ฉด ์ถฉ๋, ์์ธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋จ. ๋ํ ๋ทฐ๋ชจ๋ธ ์์ฒด๋ ํ ์คํธ๊ฐ ๊ฐ๋ฅํด์ผ ํ๋๋ฐ ์๋๋ก์ด๋ ์ฝ๋๊ฐ ๋ค์ด๊ฐ๊ฒ ๋๋ฉด ํ ์คํธ๊ฐ ์ด๋ ค์์ง๋ค๋ ์ ๋ ์์.
๊ทธ๋ ๋ค๋ฉด context๊ฐ ํ์ํ ์ํฉ์์ ๋ทฐ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ๋๊ฐ? : AndroidViewModel ์ฌ์ฉ. AndroidViewModel์ Application context๋ฅผ ์ฌ์ฉํ๊ณ ์์.
// AndroidViewModel ์์
class VM(application: Application) : AndroidViewModel(application)
// context ํ์ํ ๊ณณ์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
getApplication<Application>().applicationContext
๋ด๊ฐ ์ฌ์ฉํ๋ MVVM
- Data Binding, Live Data ์ฌ์ฉ, ViewModel ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ
- ์กํฐ๋นํฐ์์ ์ด๋ฒคํธ ๋ฐ๊ณ ๋น์ง๋์ค์ ์ฒ๋ฆฌ๊ฐ ํ์ํ๊ณ ์ด ์ด๋ฒคํธ๋ก ์ธํด ๋ทฐ๊ฐ ์๋ก ๊ฐฑ์ ๋์ด์ผ ํ๋ ๊ฒฝ์ฐ data binding - live data ์ฌ์ฉ. ๊ทธ ์ธ์ ๋น์ง๋์ค์ ์ฒ๋ฆฌ๋ง ํ์ํ๋ฉด viewmodel์์ ์ฒ๋ฆฌ๋ง ํด์ฃผ๊ณ ๋๋ฌ์. ๊ทธ๋ฆฌ๊ณ ํด๋น ์ด๋ฒคํธ๊ฐ viewmodel์์ ์๋ฒ๋ก ์ด๋ฒคํธ ๊ฐฑ์ ์ด ํ์ํ ๊ฒฝ์ฐ repository pattern์ผ๋ก ๋ง๋ค์ด๋์๋ ํด๋น repository๋ฅผ ์ฌ์ฉํ ๋ฉ์๋ ํธ์ถ
๋ ํผ๋ฐ์ค
'CS > Android, Kotlin' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android] Custom View (0) | 2023.04.15 |
---|---|
[Android] Data Binding (0) | 2023.04.15 |
[Android] ์๋๋ก์ด๋ ๋ฆฌ์์ค (0) | 2023.04.07 |
[Android] AOS ART, Garbage Collector ๋ฐฉ์ (0) | 2023.04.07 |
๋ฒ์ ์ง์ ํจ์ (0) | 2022.12.01 |