MVVM ํจํด ์ ์
Model, View, ViewModel์ ์ฝ์
Model
- MVC์ ๋์ผ
- ์ฃผ๋ก DB ์ฌ์ฉ ๋๋ API ํธ์ถ์ ์๋ฏธ
View
- Activity, Fragment (xml ํ์ผ + Activity, Fragment ํ์ผ)
- ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ์
- ViewModel์ ๋ฐ์ดํฐ๋ฅผ ๊ด์ฐฐํ์ฌ UI ๊ฐฑ์
- ViewModel์ ๋ ํผ๋ฐ์ค๋ฅผ ๊ฐ์ง ์ ์์
- UI ๋ณ๊ฒฝ๊ณผ ๊ด๋ จ๋ ์ฌํญ๋ง ์ฒ๋ฆฌ (Model์ ์๋ฉด ์ ๋จ)
ViewModel
- View๋ฅผ ํตํด ์ฌ์ฉ์ ์ ๋ ฅ์ ๋ฐ์ผ๋ฉด Model์ ์๋ง์ ๋ฐ์ดํฐ ์์ฒญ
- Model์์ ๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ ์๋ง๊ฒ ๊ฐ๊ณตํ์ฌ ๊ฐ ๊ฐฑ์
- View, Context์ ์กด์ฌ๋ฅผ ์๋ฉด ์ ๋จ
MVVM ํจํด์์ View์ Model ์ฌ์ด์ ์์กด์ฑ์ด ์กด์ฌํ๋ฉด ์ ๋จ (View๋ ViewModel๋ง ๊ด์ฐฐํ๋ ์ญํ )
MVVM ํจํด ์ฅ๋จ์
์ฅ์
- View์ ๋ํ ์์กด์ฑ์ด ์์ผ๋ฏ๋ก ์ ๋ ํ ์คํธ ๊ฐํธ
- ViewModel์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก Memory Leak ๋ฐ์ X (Activity, Fragment ๋ผ์ดํ์ฌ์ดํด์ ์์กดํ์ง ์์ = View๊ฐ Model์ ์ ๊ทผํ์ง ์์)
- ์ญํ ๋ถ๋ฆฌ๊ฐ ์๋์ด ์์(๋ชจ๋ํ)
๋จ์
- ๊ตฌํ์ด ์ด๋ ค์
- XML ์์ ์ด ํ์ํ ๊ฒฝ์ฐ ViewModel๊ณผ XML์ ๋ก์ง์ ํ์ ํด์ผ ํจ (์ ์ง๋ณด์๊ฐ ๊น๋ค๋กญ๋ค)
AAC
AAC(Android Architecture Components)๋ ํ ์คํธ์ ์ ์ง๋ณด์๊ฐ ์ฌ์ด ์ฑ์ ๋์์ธํ ์ ์๋๋ก ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ชจ์
ViewModel
AAC์ ViewModel๊ณผ MVVM์ ViewModel์ ์๋ก ๋ค๋ฅด๋ค.
ํ์ง๋ง MVVM์ ViewModel์ ๋ง๋ค ๋, AAC์ ViewModel์ ์ฌ์ฉํ์ฌ ๋ง๋ค๋ฉด ๋ ํธ๋ฆฌํ๋ค.
LiveData
๊ด์ฐฐ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ํ๋ ํด๋์ค
LifeCycle์ ์ธ์ (Activity, Fragment ๋ฑ ๋ค๋ฅธ ์ฑ ๊ตฌ์ฑ์์์ LifeCycle ๊ณ ๋ ค)
LifeCycle ์ธ์์ ํตํด LiveData๋ LifeCycle์ด ํ๋ ์ํ์ธ ์ฑ ๊ตฌ์ฑ์์ Observer๋ง ์ ๋ฐ์ดํธ
Repository
Model์ Repository -> DataSource๋ก ์ข ๋ ์ธ๋ถํํ์ฌ Model์์ ์ง์ DataSource๋ฅผ ๋ค๋ฃจ๊ธฐ๋ณด๋ค ์ฐ๋ํ๋ ๋ถ๋ถ์ ๋ฐ๋ก ๋ผ์ด ๋์ ๊ฒ (์ถ์ฒ)
ViewModel์ DB๋ ์๋ฒ์ ์ง์ ์ ๊ทผํ์ง ์๊ณ , Repository์ ์ ๊ทผํ๋ ๊ฒ์ผ๋ก ์ฑ์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ค.
๋ง๋ฌด๋ฆฌ
MVVM ํจํด, AAC์ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ์ ์์๋ณด์๋ค.
์ด์ ์ค์ต์ผ๋ก MVVM + AAC๋ฅผ ํ์ฉํ ์ฑ์ ๋ง๋ค์ด๋ณด๋ ๊ฒ ๋ค์ ๊ณผ์ ์ธ ๋ฏ ์ถ๋ค.
ํ์ฌ ์งํ ์ค์ธ ํ๋ก์ ํธ์๋ MVVM ํจํด์ ์ ์ฉํ๋๋ฐ, ๊ฐ๋ ์ ๋ฆฌํ๋ค ๋ณด๋ ์๋ชป ์ ์ฉํ ๋ถ๋ถ์ด ๊ฝค ์๋ ๋ฏํ๋ค..ใ ใ
์ฐธ๊ณ ์๋ฃ
https://academy.realm.io/kr/posts/eric-maxwell-mvc-mvp-and-mvvm-on-android/
https://developer.android.com/topic/libraries/architecture?hl=ko
https://velog.io/@hwi_chance/Android-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-AAC
https://blog.yena.io/studynote/2019/03/16/Android-MVVM-AAC-1.html