์ด๋ฒ ํฌ์คํ ์์๋ ์ ๋ฒ ํฌ์คํ ์์ ์ธ๊ธํ๋ค์ํผ, clean architecture์ ํจ๊ป ์ค๋ฌด์์ ๋ฐํ์์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋์์ธ ํจํด์ธ mvvm์ ๋ํด ๊ณต๋ถํด์ ์ ์ด๋ณด๊ณ ์ ํ๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ๊ณต๋ถํ๋ฉด์ ์ฐธ๊ณ ํ ํฌ์คํ ๋ ๊ฐ์ด ๋งํฌ๋ก ๋จ๊ฒจ ๋๊ฒ ๋ค.
MVVM์ ๋ฌด์์ผ๊น?
MVVM์ ๊ดํด์๋ ์ฐพ์๋ณด๋ฉด ์๋ฃ๊ฐ ๋ง์ด ๋์ค๊ธฐ ๋๋ฌธ์ ๊ฐ๋จํ๊ฒ ์ ์ํด ๋ณด๋ฉด,
MVC์ MVP์์ view์ ์ฎ์ด๋ ์์กด์ฑ์ ํด๊ฒฐํ๊ธฐ ์ํด view model์ ๋์ ํ ๋์์ธ ํจํด.
MVVM์ model, view, view model์ ์ฝ์๋ค.
์ฌ๊ธฐ์ view model๊ณผ view๋ 1 : n์ ๊ด๊ณ๋ฅผ ๊ฐ์ง ์ ์๋ค๋ ํน์ง์ ์ง๋๋ค.
MVVM์ ์ ์ฐ๋ ๊ฑธ๊น?
mvvm ๋์์ธ ํจํด์ ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ ๊ฐ์ง๋ค.
- ์์กด์ฑ ์ต์ํ
view๋ view model์ ์์ง๋ง, view model์ view๋ฅผ ๋ชจ๋ฅด๊ณ , view model์ model์ ์์ง๋ง, model์ view model์ ๋ชจ๋ฅธ๋ค.
์ด๋ฌํ ๋จ๋ฐฉํฅ ์์กด์ฑ์ผ๋ก ์ธํด ๊ฐ ์์์ ์์ ์ด ๋ค๋ฅธ ์์์ ๋ฏธ์น๋ ์ํฅ์ด ์ค์ด๋ ๋ค. - ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ
activity, fragment์ ๋ชจ๋ ์ฝ๋๋ฅผ ์์ฑํด ์ฑ ๋์ ์๋ ์ ํ, ์ ์ง๋ณด์์ ์ด๋ ค์, ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ์ด๋ ค์์ด ์๊ธฐ๋ ๊ธฐ์กด์ ์ฝ๋์ ๋ฌธ์ ์ ์ ํด๊ฒฐํด ์ค๋ค.
๊ฐ ์์์ ์ญํ ์ด ๋ช ํํด์ ธ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง ๋ณด์์ฑ์ด ํฅ์๋๋ค.
ํ ๋ก์ง์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํด๋ ๋ค๋ฅธ ๋ถ๋ถ์ ๋ฏธ์น๋ ์ํฅ์ ์ต์ํํ ์ ์๋ค. - ๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ
activity, fragment์์ live data์ data binding์ ์ด์ฉํด ๋ฐ์ดํฐ๊ฐ ๋ฐ๋ ๋, ๊ทธ๊ฒ์ ๋ฐ์ํ๋ ๋์์ ์ํํ๊ฒ ํ ์ ์๋ค.
view model์ ๋ฐ์ดํฐ์ ์ฐ๊ฒฐ๋ view์ ui๋ view model์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค, ๊ทธ์ ๋ง๋ ui๋ฅผ ์งค ์ ์๋ค๋ ๋ป์ด๋ค.
์ ์ฅ์ ์ด ์์ด์ mvvm์ ์ฌ์ฉ์ ์งํฅํ๋ ๋ฏํ๋ค.
๊ฒฐ๋ก ์ view์ model์ ์์กด์ฑ์ ๋ถ๋ฆฌํด ์์กด์ฑ์ ์ต์ํํ๊ณ , ui์ ๋ชจ๋ ์์ฑ๋์๋ ์ฝ๋๋ฅผ ๋ค๋ฅธ ์์๋ก ์ฎ๊ฒจ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๊ณ live data, data binding๊ณผ ํจ๊ป ์ฌ์ฉํด ๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ mvvm์ ์ฌ์ฉํ๋ค.
๋ ๋ง์ ์ ๋ณด๋ ์๋์ ๊ธ๋ค์ ์ฐธ๊ณ ๋ฐ๋๋ค.
Android์์ MVVM ํจํด์ด ์ค์ํ ์ด์
Android์์ MVVM ํจํด์ด ์ค์ํ ์ด์
์๋ง์ ์ํคํ ์ฒ ํจํด ์ค ๊ทธ๋ ๋จ ํ๋
kevinlim17.com
Android์์์ MVVM์ ๋ฌด์์ด๊ณ ์ ์ฌ์ฉํ๋๊ฐ
Android์์์ MVVM์ ๋ฌด์์ด๊ณ ์ ์ฌ์ฉํ๋๊ฐ
์ด์ ๊ธฐ๋ก์์ ์ํคํ ์ฒ ๊ฐ์ ์ ์ํ ์ด์ผ๊ธฐ๋ฅผ ํ์๋ค. ๊ฐ์ ์ ์ํ ์ปดํฌ๋ํธ(Component)๋ค์ ์ฌ์ฉํ๊ณ , MVVM ๋์์ธ ํจํด์ ์ ์ฉํ๊ธฐ๋ก ํ์๋ค. ์ด๋ฒ ๊ธฐ๋ก์์๋ ์ด MVVM ๋์์ธ ํจํด์ด ๋ฌด์์ธ์ง๋ฅผ
devsoboro.tistory.com
[Android] MVVM ํจํด๊ณผ ์ ์ฉ๋ฐฉ์
[Android] MVVM ํจํด๊ณผ ์ ์ฉ๋ฐฉ์
[Android] MVVM ํจํด๊ณผ ์ ์ฉ๋ฐฉ์
velog.io
MVVM์ ๊ตฌ์กฐ
- model
๋ฐ์ดํฐ์ ๋ํ ์ฒ๋ฆฌ, ๋ฐ์ดํฐ ๊ด๋ จ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌ.
view์ ๋ํ ๋ก์ง์ ๊ฐ์ง์ง ์์์ผ ํ๋ค.
โณ db, api ์ ๊ทผ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์งํํ๊ฑฐ๋, db, api ์ ๊ทผ์ ๋ํ result data class๋ฅผ ์ ์ํ๋ค. - view
ui๋ฅผ ์ ์ํ๋ค.
view model์ ๋ฐ์ดํฐ์ ๋ฐ๋ผ ๊ทธ์ ๋ง๋ ui๋ก ๋ณ๊ฒฝํ๋ค.
โณ view model์ live data ๋ฐ์ดํฐ๋ฅผ observe ํด์ ๋ฐ์ดํฐ์ ๋ฐ๋ฅธ ui๋ก ๋ณ๊ฒฝํ๋ค. - view model
view์ model ์ฌ์ด์ ๋งค๊ฐ์ฒด.
view์ ์ํ, ui์ ๋ํ ๋ก์ง ๊ตฌํ.
โณ model์์ ๋ถ๋ฌ์จ api ์ ๊ทผ์ ๋ํ ๋ฐ์ดํฐ๋ฅผ live data๋ฅผ ํตํด view๋ก ๋๊ฒจ์ค๋ค.
๋ ์์ธํ ์ ๋ณด๋ ์๋์ ๊ธ ์ฐธ๊ณ .
[Android/Design Pattern] MVVM ๋์์ธ ํจํด์ ๋ํด ์์๋ณด์!
[Android/Design Pattern] MVVM ๋์์ธ ํจํด์ ๋ํด ์์๋ณด์!
์ ์ MVP ์ ๋ํด ์์๋ณด์์ต๋๋ค. ์ด๋ฒ์๋ ๊ฐ๊ฐ์ ๋์์ธ ํจํด์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๋ง๋ค์ด์ง MVVM ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. MVVM ์ด๋? MVVM ํจํด์ Model - View - ViewModel ๋ฅผ ํฉ์น ์ฉ์ด์ ๋๋ค. Model
minhyuuk.tistory.com
MVVM์์์ liveData, stateFlow
mvvm์ ๊ณต๋ถํ๋ค ๋ณด๋ฉด ์ญ์ ๊ผญ ๊ฐ์ด ์ธ๊ธ๋๋ ๊ฐ๋ ์ค ํ๋๊ฐ live data์ด๋ค.
live data๋ android jetpack ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ฅ ์ค ํ๋๋ก,
๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ ๊ด์ฐฐํ ์ ์๋ data holder ํด๋์ค์ด๋ค.
์ผ๋ฐ์ ์ธ observable๊ณผ๋ ๋ฌ๋ฆฌ, android์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์๊ณ ์๋ค. ๊ทธ๋์ ์๋ช ์ฃผ๊ธฐ๊ฐ started ๋๋ resumed ์ํ์ผ ๋๋ง ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธํ๋ค.
observer ๊ฐ์ฒด์ ํจ๊ป ์ฌ์ฉ๋๋ค. live data์ ๋ฐ์ดํฐ์ ๋ณํ๊ฐ ์ผ์ด๋ฌ์ ๋, ๋ฑ๋ก๋ observer์ ๋ณํ๋ฅผ ์๋ฆฌ๊ณ , observer์ onChanged() ๋ฉ์๋๊ฐ ์คํ๋๋ค.
๊ฒฐ๊ตญ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๊ณ ์๋ค๊ฐ ๋ณ๊ฒฝ๋ ๋ observer์์ ๋ณ๊ฒฝ๋ ๊ฐ์ ์ ์ ์๊ฒ ํด์ฃผ๋ ์ญํ ์ ํ๊ณ ์๋ค.
์ค๋ช ์ ๋์์๋ ๊ฒ์ฒ๋ผ, ๋ง์ ์ฅ์ ์ ๊ฐ์ง๊ณ ์๋ค.
ํ์ง๋ง live data๋ฅผ ์ญ ํ๊ณ ๋ค์ด๊ฐ๋ค ๋ณด๋ฉด state flow๋ผ๋ ๊ฐ๋ ๋ ์ฝ๊ฒ ์ฐพ์๋ณผ ์ ์๋ค.
state flow๋ coroutine flow์ ํ์ ํด๋์ค๋ก, ์ํ๋ฅผ ๋ํ๋ด๋ ๊ฐ์ ์ง์์ ์ผ๋ก ๋ฐฐ์ถํ ์ ์๋ค.
์ด๊ธฐ ์ํ๊ฐ ์์ด์ผ ํ๋ฉฐ, collect๋ฅผ ์ค๋จํ์ง ์๊ณ ์๋ช ์ฃผ๊ธฐ๊ฐ destroy ๋ ๋๊น์ง ๊ฐ์ ๋ถ๋ฌ์จ๋ค.
state flow ๊ด๋ จ ์๋ฃ๋ค์ ๋ณด๋ฉด ํญ์ live data์ ์ฎ์ด๋ฉด์ state flow๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ์ข๋ค๊ณ ํ๋ค.
์ด๋ค ์ ์ด live data๋ณด๋ค ๋์์ง ์์๋ณด์.
liveData vs stateFlow
state flow๋ live data์ ๋นํด ์๋์ ๊ฐ์ ์ฅ์ ์ด ์๋ค.
- coroutine scope(์ฝ๋ฃจํด ๋ฒ์)์์ ์์ ํ๊ฒ ์ฌ์ฉ.
activity, fragment๊ฐ destroy ๋๊ฑฐ๋ view๊ฐ ๋ถ๋ฆฌ๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ๋์ถ์ ๋ฐฉ์งํ ์ ์๋ค. - ๋ถ๋ณ์ฑ ๋ณด์ฅ.
live data์๋ ๋ฌ๋ฆฌ state flow์์๋ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ, ์๋ก์ด ์ํ ๊ฐ์ ๋ฐฐ์ถํ ๋๋ง๋ค ์๋ก์ด ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ค.
์๊ธฐ์น ์์ ๊ฐ ๋ณ๊ฒฝ์ ๋ฐฉ์งํ ์ ์๋ค.
๊ทธ๋ฌ๋ฉด live data๋ ์ด๋ค ๋จ์ ์ด ์๊ธธ๋ state flow์ ๋ฐ๋ ค์ ์ ์ฐ์ด๊ฒ ๋๋ ๊ฑธ๊น?
- ๋น๋๊ธฐ ์คํธ๋ฆผ์ ๋ถ์ ํฉ.
live data์ ๊ด์ฐฐ์ ์ค์ง main thread์์๋ง ์งํ๋๊ธฐ ๋๋ฌธ์ android clean architecture์ data layer์์ live data๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์ฒ๋ฆฌํ๋ ค๊ณ ํ๋ฉด ํ๊ณ๊ฐ ์๊ธด๋ค. - clean architecture์ domain์์ ์ฌ์ฉํ๊ธฐ ๋ถ์ ํฉ.
์ผ๋ฐ์ ์ผ๋ก clean architecture์ domain layer๋ ์์กด์ฑ์ ๊ฐ์ง์ง ์๋ ์์ํ kotlin/java ์ฝ๋๋ก ์ด๋ฃจ์ด์ ธ์ผ ํ๋ layer์ด๋ค.
live data๋ aac ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ domain layer์์ ์ฌ์ฉํ๋ฉด clean architecture ์์น์ ์๋ฐฐ๋๋ค.
live data์ ๋จ์ ๋ค์ ๋ชจ๋ state flow๋ฅผ ์ฌ์ฉํ๋ฉด ํด๊ฒฐ์ด ๊ฐ๋ฅํ ๋ฌธ์ ๋ค์ด๋ค.
- state flow๋ coroutine ๊ธฐ๋ฐ์ด๊ธฐ ๋๋ฌธ์ ๋น๋๊ธฐ ์คํธ๋ฆผ์ ์ ํฉํ๋ค.
- state flow๋ ์์ํ kotlin ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ clean architecture ์์น์ ์๋ฐฐ๋์ง ์๋๋ค.
๋ ์์ธํ ์ ๋ณด๋ฅผ ์๊ณ ์ถ์ผ๋ฉด ์๋ ํฌ์คํ ์ ๋ ์์ธํ ์ ๋ณด๊ฐ ์๋ค.
[Android] LiveData์ ๋ํด ์์๋ณด์
[Android] LiveData์ ๋ํด ์์๋ณด์
์์ ๊ธ์์ ViewModel์์ ์์๋ณด์์ต๋๋ค. ์ด์ ์ฐ๋ฆฌ๋ ViewModel์ด ์ด๋ค ์ญํ ์ ํ๋์ง ์๊ณ ์์ต๋๋ค. ViewModel์ ํตํด UI ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํด์ฃผ๊ณ View์ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ ค์ค ์ ์๋ค๋ ๊ฒ์ ์๋๋ค.
ardor-dev.tistory.com
StateFlow ๋?
StateFlow๋ ์ฝ๋ฃจํด ํ๋ก์ฐ์ ํ์ ํด๋์ค๋ก, ์ํ๋ฅผ ๋ํ๋ด๋ ๊ฐ์ ์ง์์ ์ผ๋ก ๋ฐฐ์ถํ ์ ์์ต๋๋ค. StateFlow๋ ๋งค์ฐ ์ ์ฌํ ๋์์ ์ํํ๋ LiveData์ ๋น๊ตํ์ฌ ๋ช ๊ฐ์ง ์ฅ์ ์ด ์์ต๋๋ค. ๋จผ์ State
velog.io
[Android] LiveData... ๋ ๋๊ตฌ๋?
[Android] LiveData...๋ ๋๊ตฌ๋?
์๋ ํ์ธ์.์ด๋ฒ ํฌ์คํ ์ ์ฃผ์ ๋ LiveData ์ ๋๋ค.์๋๋ก์ด ์ํคํ ์ณ ํจํด(MVP, MVM, MVVM ๋ฑ)์์ ๋น ์ง ์ ์๋ ๊ฒ๋ค์ด ๋ช๊ฐ์ง ์กด์ฌ ํ๋๋ฐ์.๊ทธ์ค์ ์ ๋ฒ์๊ฐ์ ์๊ฐ๋๋ฆฐ Databinding์ ์ด์ด์ ์ด๋ฒ์
velog.io
[Android] LiveData VS StateFlow, ์ StateFlow๋ฅผ ์จ์ผ ํ ๊น?
[Android] LiveData VS StateFlow, ์ StateFlow ๋ฅผ ์จ์ผํ ๊น?
LiveData ๋ Lifecycle ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋๋ก, ์๋๋ก์ด๋ ๊ณตํต์ ๋ผ์ดํ์ฌ์ดํด๊ณผ ๊ด๋ จ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๊ฒ ํด ์ฃผ๋ฉด์ ์ฑ ๊ฐ๋ฐ์ ๋ณด๋ค ๋ ์ ์ง๋ณด์ํ๊ธฐ ์ฝ๊ฒ, ํ ์คํธํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด์ฃผ๋ ๋ผ์ด
readystory.tistory.com
์ ๋ฆฌ
mvvm์ ๋ค์ ์ ๋ฆฌํด ๋ณด๋ฉด์, ์ฌ์ฉํ๋ ์ด์ , ๊ตฌ์กฐ๋ณ ํน์ง, view model์ ๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ํ live data์ state flow๊น์ง ๊ณต๋ถํ ์ ์์๋ค.
state flow๋ฅผ ๊น๊ฒ ๋ค์ด๊ฐ๋ ค๋๊น coroutine ๊ด๋ จ ๊ฐ๋ ๋ค์ด ๋ฑ์ฅํ๊ธฐ ์์ํ๋ค. ๊ทธ๋์ ๋ค์ ํฌ์คํ ์ฃผ์ ๋ coroutine์ด๋ค.