๋ชฉ์ฐจ
๐๋ค์ด๊ฐ๊ธฐ ์ ์
Android ๋ทฐ์ ๋ณด์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ทฐ๋ชจ๋ธ์ ์ฌ์ฉํ๊ณ ์๋ค.
์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ฉด ์ด๋ฅผ ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ์ ๋ํ๋ด๊ธฐ ์ํด LiveData๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค.
ViewModel๊ณผ LiveData ๊ทธ๋ฆฌ๊ณ StateFlow์ ๋ํด ์ง์ ๊ตฌํํด๋ณด๋ฉฐ ์ดํดํด๋ณด๋ ค ํ๋ค.
ํนํ LiveData์ StateFlow์ ๊ธฐ๋ฅ์ด ์ ์ฌํ๋ฐ ์ด๋ค ์ฐจ์ด๊ฐ ์๋์ง ์์๋ณด๋ ๊ฒ์ด ๋ชฉํ์ด๋ค!
๐ซฑUI ์ปจํธ๋กค๋ฌ๋?
UI ์ปจํธ๋กค๋ฌ์๋ ํฐ ํ๋ฉด ํ๋๋ฅผ ๋ํ๋ด๋ ์กํฐ๋นํฐ์ ๋ถ๋ถ ํ๋ฉด์ ์ด๋ฃจ๋ ํ๋๊ทธ๋จผํธ๊ฐ ์๋ค. UI ์ปจํธ๋กค๋ฌ๋ ํ๋ฉด์ ๋ทฐ๋ฅผ ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์ ์ด๋ฒคํธ๋ ์ฌ์ฉ์์ ์ํธ์์ฉํ๋ ๋ชจ๋ UI ๊ด๋ จ ๋์์ ํฌ์ฐฉํ์ฌ UI๋ฅผ ์ ์ดํ๋ค.
์ด ๋ ์ฑ์ ๋ฐ์ดํฐ ๋๋ ๋ฐ์ดํฐ์ ๊ด๋ จ๋ ๋ก์ง์ UI ์ปจํธ๋กค๋ฌ ํด๋์ค์ ํฌํจ๋์ด์๋ ์๋๋ค.
๊ทธ ์ด์ ๋ ์๋๋ก์ด๋ ์์คํ ํน์ฑ ์ ์์คํ ์กฐ๊ฑด์ผ๋ก ์ธํด ์ธ์ ๋ ์ง UI ์ปจํธ๋กค๋ฌ๋ฅผ ์ ๊ฑฐํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ฅผ ๊ฐ๋ฐ์๊ฐ ์ ์ดํ ์ ์๊ธฐ ๋๋ฌธ์ UI ์ปจํธ๋กค๋ฌ์ ์ฑ ๋ฐ์ดํฐ๋ ์ํ๋ฅผ ์ ์ฅํ๋ฉด ์๋๋ ๊ฒ์ด๋ค!!
๋์ ์ด๋ฌํ ์ฑ ๋ฐ์ดํฐ๋ ์ํ ๊ด๋ จ ๋ก์ง์ ViewModel์์ ์ฒ๋ฆฌํ๋ฉด ๋๋ค.
๐ซฑViewModel : ์ฌ์ฉ์ ์ก์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ ๋ฐ์ดํฐ ์ ์ฅํ๊ธฐ
๋ทฐ๋ชจ๋ธ์ด๋ ๋ทฐ์ ํ์๋๋ ์ฑ์ ๋ฐ์ดํฐ์ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ ๊ตฌ์ฑ ์์์ด๋ค. ํ๋์ด๋ ํ๋๊ทธ๋จผํธ๊ฐ ์๋ฉธ๋๊ณ ๋ค์ ์์ฑ๋ ๋ ํ๊ธฐ๋์ง ์๋ ์ฑ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
ViewModel ๊ฐ์ฒด๋ ๊ตฌ์ฑ์ด ๋ณ๊ฒฝ๋๋ ๋์ ์๋์ผ๋ก ์ ์ง๋์ด ๋ณด์ ํ๊ณ ์๋ ๋ฐ์ดํฐ๊ฐ ๋ค์ ํ๋ ๋๋ ํ๋๊ทธ๋จผํธ ๊ฐ์ฒด์ ์ฆ์ ์ฌ์ฉ๋ ์ ์๋ค.
๋ทฐ๋ชจ๋ธ ๊ฐ์ฒด๋ ํ๋์ด๋ ํ๋๊ทธ๋จผํธ ๊ฐ์ฒด์ฒ๋ผ ์๋ฉธ๋์ง ์๊ธฐ ๋๋ฌธ์ด๋ค
๋ทฐ๋ชจ๋ธ์ ํตํด์ ์ฌ์ฉ์์์ ์ํธ์์ฉ์ ํตํด ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ค.
1๏ธโฃ ๐ ๋ทฐ ๋ชจ๋ธ์ ๊ทธ๋ฅ ์ธ์คํด์คํํ๋ฉด ์๋๋ ์ด์ !
์ฐ๋ฆฌ๋ ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํด์ค ๋ ๊ฐ์ฅ ๋จ์ํ๊ฒ๋ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํด์ค๋ค.
private val viewModel = GameViewModel()
๊ทธ๋ฌ๋ ์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์์ฑํด์ค ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ์๋ค.
๊ธฐ๊ธฐ์์ ๊ตฌ์ฑ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ ๋์ ์ฑ์ ๋ทฐ๋ชจ๋ธ ์ฐธ์กฐ์ ์ํ๋ฅผ ์์คํ๊ฒ ๋๋ค. ๊ธฐ๊ธฐ๊ฐ ํ์ ํ๋ฉด ํ๋์ด ์๋ฉธ๋ ํ ๋ค์ ์์ฑ๋๊ณ ์ด๊ธฐ ์ํ์ ์๋ก์ด ๋ทฐ๋ชจ๋ธ ์ธ์คํด์ค๊ฐ ๋ค์ ์์๋๋ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ ์ด ๋ฐฉ์์ด ์๋๋ผ by viewModels() ์์ฑ ์์ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ๋ทฐ๋ชจ๋ธ์ ์ด๊ธฐํํด์ค๋ค.
๋ทฐ๋ชจ๋ธ์ ์ด๊ธฐํํ ๋ ๊ณต์๋ฌธ์๋ฅผ ๋ณด๊ณ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํด์๋ค. ๋๋์ฒด ์ ์ด๋ ๊ฒ ์์ฑํด์ฃผ์ด์ผํ๋๊ฑธ๊น?
private val viewModel: GameViewModel by viewModels()
- ์์ฑ ์์ ์ ๊ทผ ๋ฐฉ์
// Syntax for property delegation
var <property-name> : <property-type> by <delegate-class>()
์ด๋ ๊ฒ ์์ฑ ์์ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ viewModel ๊ฐ์ฒด์ ์ฑ ์์ viewmodels ๋ผ๋ ๋ณ๋์ ํด๋์ค์๊ฒ ์์ํ๋ค
viewModel ๊ฐ์ฒด์ ์ ๊ทผํ๋ฉด ์ด ๊ฐ์ฒด๋ ๋๋ฆฌ์ ํด๋์ค viewModels์ ์ํด ๋ด๋ถ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ค. ๋๋ฆฌ์ ํด๋์ค viewModels๋ ์ฒ์ ์ก์ธ์ค ์ ์๋์ผ๋ก viewModel ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ์ด ๊ฐ์ ๊ตฌ์ฑ ๋ณ๊ฒฝ ์ค์๋ ์ ์งํ๋ฉฐ ์์ฒญ์ด ์์ ๋ ๋ฐํํด์ค๋ค ๐
- ํด๋์ค๋ฅผ ์์ํ๋ค๋ ๊ฒ์ด ๋ฌด์์ ์๋ฏธ์ผ๊น?
2๏ธโฃ๋ทฐ๋ชจ๋ธ ์๋ช ์ฃผ๊ธฐ
๐ซฑLiveData : ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ UI์ ๋ฐ์ํ๊ธฐ
๊ทธ๋ฌ๋ ์ด๋ ๊ฒ ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๊ฐ UI์ ๋ฐ์๋์ง๋ ์๋๋ค. ์ด ๋ ํ์ํ ๊ฒ์ด LiveData์ด๋ค!
'๐ค2024 ์๋๋ก์ด๋ > Filmo ์ํ ํ๋ก์ ํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฌ๋ฌ ๊ฐ์ flow์ combine์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ (0) | 2024.07.05 |
---|---|
์ฝ๋ ์ง๋ฌธ & ๋ต๋ณ ์ ๋ฆฌ (0) | 2024.06.24 |
Android Recyclerview : no attached adapter , skipping layout ์๋ฌ ํด๊ฒฐ ๊ณผ์ ๊ธฐ๋ก (0) | 2024.05.15 |
๋ก๊ทธ์ธ ์ฑ๊ณต ์ ์ฒ๋ฆฌ ์๋ฌ ํด๊ฒฐํ๊ธฐ (0) | 2024.05.13 |
๋ฉ์ธ ํ๋ฉด : ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ ๊ตฌํ ๊ณผ์ ์ ๋ฆฌ (0) | 2024.05.10 |