[ํฐ๋] ํฐ๋ ๊ฐ๋ฐ์์ RecyclerView ViewModel ์ ์๊ธฐ
์๋
ํ์ธ์ ํฐํ์ ์๋๋ก์ด๋ ๊ฐ๋ฐ์ ๊น์ ์ ์
๋๋ค :D
์ค๋์ ์ง๋ ํฌ์คํธ์์ ๋ง์๋๋ ธ๋ ์ค๋ฅ ํด๊ฒฐ ๊ณผ์ ์ ์๊ฐํ๊ณ ์ ๋์์์ต๋๋ค!
๐ฉ๐ป๋ฌธ์ ๊ฐ ๋ฐ์ํ์ด์
๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฑด ํฐ๋์ ์ฑ๋ฆฐ์ง ๋ํ
์ผ ํ์ด์ง ์
๋๋ค.
์ดํด๋ฅผ ๋๊ธฐ ์ํด ์๋์ ์์๋ฅผ ์ค๋นํ๋๋ฐ์, ์ผ์ชฝ์ ํ์ฌ ํฐ๋ ์๋น์ค์ด๊ณ , ์ค๋ฅธ์ชฝ์ ๋น์์ ํ๋ฉด์
๋๋ค.
๋ฌธ์ ๊ฐ ๋ณด์ด์๋์? ๋ฐ๋ก ์ฑ๋ฆฐ์ง์ ๋ฏธ์
๋ฆฌ์คํธ๊ฐ ์ ๋๋ก ์์ฑ๋์ง ์๊ณ ์๋ค๋ ๊ฒ์ด์ฃ !
์๋ฌด๋ฆฌ ์ฝ๋๋ฅผ ๋ณด์๋ ๋ฌธ์ ๋ ๋ณด์ด์ง ์๊ณ ๋ ๋ง๊ฐ ๊ธฐํ์ ๋ค๊ฐ์ค๊ณ ์ ๋ง ์ง๋์ ํ๋ ธ๋ต๋๋ค :<
๐ฉ๐ป์ด๋ค ๊ธฐ์ ์ ์ฌ์ฉํ์๊น?
๋ฌธ์ ๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋ ๋จผ์ RecyclerView์ ViewModel ๊ทธ๋ฆฌ๊ณ LiveData๋ฅผ ์ดํดํด์ผ ํฉ๋๋ค.
ํฐ๋์ ๊ฐ๋ณ ๋ฆฌ์คํธ๋ ์์ ๊ธฐ์ ๋ค์ ์ฌ์ฉํด ๊ตฌํ๋์ด ์๊ธฐ ๋๋ฌธ์ด์ฃ !
๋จผ์ ๐RecyclerView๐๋ ๋ฌด์์ผ๊น์?
- ๋๋์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ํ๋ฉด์ ๋ํ๋ด๊ธฐ ์ํด์, ๊ฐ ์์ดํ ์ ๋ชฉ๋กํํ๋ก ํ๋ฉด์ ๋ํ๋ด๋๋ฐ ์ฌ์ฉ๋จ
- ViewHolder ํจํด์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ตฌํํ๋๋ก ํ์ฌ ์คํฌ๋กค์์ ๋ทฐ๋ฅผ ์ฌ์ฌ์ฉํจ
- LayoutManager๋ฅผ ํตํด์ ๊ฐ ์์ดํ ์ ๋ฐฐ์น๋ฅผ ์์ง, ์ํ, ๊ฒฉ์ ๋ฑ ๋ค์ํ๊ฒ ๋ฐฐ์นํ ์ ์์
RecyclerView๋ฅผ ๋ง๋ค๊ธฐ ์ํด ๋ฌด์์ด ํ์ํ ๊น์?
- ์ถ๋ ฅํ๊ณ ์ ํ๋ ๋ฐ์ดํฐ
- ๋ ์ด์์ ํ์ผ์ ์ ์๋ RecyclerView ์ธ์คํด์ค
- RecyclerView๋ฅผ ๊ตฌ์ฑํ ์์ดํ ์ ๋ ์ด์์
- ์ถ๋ ฅํ๊ณ ์ ํ๋ ๋ทฐ์ ์ ๋ณด๋ฅผ ๋ด์ ViewHolder
- ๋ฐ์ดํฐ์ RecyclerView๋ฅผ ์ฐ๊ฒฐ ์ํค๊ธฐ ์ํ Adapter
๊ฐ๋ตํ๊ฒ ์ค์ด์๋ฉด, ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ๋ ๋ฆฌ์คํธ๋ฅผ ํ๋ฉด์ ์ถ๋ ฅํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ UI ์ปดํฌ๋ํธ๋ก
๐๊ฐ๋ณ์ ์ธ ๊ธธ์ด์ ๋ฆฌ์คํธ ๋ฐ์ดํฐ๋ฅผ ์คํฌ๋กคํ ์ ์๋ ํํ๋ก ์ถ๋ ฅํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค๐
๋ค์์ผ๋ก โจViewModelโจ์ ์ด๋ค ํน์ง์ ๊ฐ์ง๊น์?
- ์๋ช ์ฃผ๊ธฐ์ ์ํฅ์ ๋ฐ์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ ์ ์์
- UI ์ปจํธ๋กค๋ฌ์ ๋ฐ์ดํฐ๊ฐ ๋ถ๋ฆฌ๋๋ฏ๋ก Configuration ๋ณ๊ฒฝ(ํ๋ฉด ํ์ ๋ฑ)์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ด๊ธฐํ๋๋ ํ์์ ๋ฐฉ์งํ ์ ์์
- ํ๋๊ทธ๋จผํธ ๊ฐ์ ๋ฐ์ดํฐ ๊ณต์ ๊ฐ ์ฌ์์ง
์์ ์ด๋ฏธ์ง๋ Android Activity์ ViewModel์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ๋น๊ตํ ๊ฒ์ธ๋ฐ์,
์ด๋ฏธ์ง์์๋ ํ์ธํ ์ ์๋ฏ โจViewModel์ ์ฌ์ฉํ๋ฉด Activity์ ๋
๋ฆฝ์ ์ธ ์๋ช
์ฃผ๊ธฐ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ์ ์๊ฒ ๋ฉ๋๋คโจ
๋ง์ง๋ง์ผ๋ก ๐Livedata๋ ViewModel๊ณผ ํจ๊ป ์ฌ์ฉํ์ ๋ ํญ์ ์ต์ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ๋ค๋ ํน์ง์ ๊ฐ์ง๋๋ค๐
๐ฉ๐ป๋ฌธ์ ๋ ๋ฌด์์ด์์๊น?
์! ๊ธฐ๋ฐ์ด ๋๋ ๊ธฐ์ ์ ์ค๋ช
ํ์ผ๋, ์ ๋ง ๋ฌธ์ ๊ฐ ๋ฌด์์ด์๋์ง ์์๋ด์ผ๊ฒ ์ฃ ?
์ฑ๋ฆฐ์ง์ ๋ํ ๋ฏธ์
๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ๋ฅผ ์์ฑํ๋ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ฌ์ฉ์๋ ํน์ ์ฑ๋ฆฐ์ง๋ฅผ ํด๋ฆญํ๋ค
- ํ๋ก ํธ์๋๋ ํด๋น ์ฑ๋ฆฐ์ง์ id ๊ฐ์ ๋ฐฑ์๋์ ๋ณด๋ด ๋ฏธ์ ๋ฆฌ์คํธ๋ฅผ ๋ฐ๋๋ค
- ๋ฆฌ์คํธ์ ํญ๋ชฉ(๋ฏธ์ ) ํ๋ ํ๋๋ฅผ ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ์ item์ผ๋ก ์ฌ์ฉํ์ฌ ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ๋ฅผ ์์ฑ ๋ฐ ํ๋ฉด์ ์ถ๋ ฅํ๋ค.
๋ค์์ ์ค์ ๋ฌด์ฌ๊ธฐ ์ฑ๋ฆฐ์ง๐ฅฌ๋ฅผ ํด๋ฆญํ์ ๋ ์๋ฒ์์ ๋ณด๋ด์จ ๊ฒฐ๊ณผ์ ์ผ๋ถ์ ๋๋ค.
{"result":{
"missionList":[{"id":1,"title":"ํ๋ฃจ๋์ 0์ ์ฐ๊ธฐ","required":true,"day":"TUE","check":true},
{"id":2,"title":"์ค๋์ ๊ณผ์๋น ๊ธฐ๋กํ๊ธฐ","required":true,"day":"ALL","check":true},
{"id":3,"title":"ํ
๋ธ๋ฌ์ ๋ง์ค ์๋ฃ ์ธ์ ๋ค๋๊ธฐ","required":false,"day":"ALL","check":false},
{"id":4,"title":"30๋ถ ๋ฏธ๋ง ๊ฑฐ๋ฆฌ ์์ ๊ฑฐ/๋๋ณด ์ด์ฉํ๊ธฐ","required":false,"day":"ALL","check":false}]}}
ํ๋ก ํธ์๋์์๋ ์์ ๊ฒฐ๊ณผ๋ฅผ ์๋์ ๊ฐ์ ๋ฐ์ดํฐ ํด๋์ค์ ๋ด์ ๋ฐ์ต๋๋ค.
data class ChallengeDetail (
//์๋ต
)
data class Result (
//์๋ต
val missionList: List<MissionList>
)
data class MissionList (
var check: Boolean,
val day: String,
val id: Int,
val required: Boolean,
val title: String
)
์ด์ ๋ฐ์ดํฐ์ ํจ์จ์ ์ธ ๊ด๋ฆฌ๋ฅผ ์ํด ViewModel์ ์ฌ์ฉํ ์ฐจ๋ก์ธ๋ฐ์,
์ฌ๊ธฐ์ ์ ์ค์๊ฐ ๋ฑ์ฅํฉ๋๋ค!
์ฑ๋ฆฐ์ง ๋ํ
์ผ ํ์ด์ง์ View Model ์์์ missionList์ ์์ ํ๋ ํ๋๋ฅผ ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ์ item์ผ๋ก ์ฌ์ฉํ ๊ฒ์ด์ง๋ง
LiveData์ ์๋ฒ์์ ๋ฐ์์จ ์์ฒญ ์ ์ฒด์ธ ChallengeDetail์ Livedata์ ๋ด๊ณ ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ก ์ธํด ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ๊ฐ item์ ์ ๋๋ก ์ธ์ํ ์ ์์๋ ๊ฒ์ด์ฃ .
์ฌ๋ฐ๋ฅด๊ฒ ๊ณ ์น๋ฉด ์๋์ ๊ฐ์ ์ฝ๋๊ฐ ๋๋ต๋๋ค.
ChallengeDetailViewModel์์ ๋ฏธ์ ๋ฆฌ์คํธ๋ฅผ ์ ๊ด๋ฆฌํ ์ ์๊ฒ ์ฃ ?
๐ฉ๐ป๋ง์น๋ฉฐ
RecyclerView์ ViewModel ๊ทธ๋ฆฌ๊ณ LiveData์ ๋์ ๋ฐฉ์์ ์ดํดํ ์ง๊ธ์ ๊ฐ๋จํ ๋ฌธ์ ์ด์ง๋ง,
๊ธฐ์ ์ ๋ํ ์ดํด๊ฐ ์ ํ๋์ง ์์๋ ๋น์์๋ ๋ฌธ์ ํด๊ฒฐ์ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ ธ์ต๋๋ค.
์ด๋ ๊ฒ ๊ฐ๋จํ ๋ฌธ์ ๋ก ๋ฉฐ์น ์ ๊ณ ๋ฏผํ๋ค๋ - ๋ถ๋๋ฝ๊ธฐ๋ ํ์ง๋ง ์ด๋ ๊ฒ ํ๊ณ ๋ฅผ ๋จ๊ธฐ๋ ์ด์ ๋
์์ผ๋ก๋ ๊ธฐ์ ์ ์ ์ฉํ๊ธฐ์ ์์ ์ ๋๋ก ๊ณต๋ถํ๊ณ ์ดํดํ๋ ๊ฐ๋ฐ์๊ฐ ๋๊ณ ์ ํ๋ ๋ค์ง์ด๊ธฐ๋ ํฉ๋๋ค.
๋ฌธ์ ํด๊ฒฐ ๊ณผ์ ์ ์ด์ ์ ๋ง์ถฐ ๊ธ์ ์ฐ๋ค๋ณด๋ ์ธ๊ฐ์ง ๊ธฐ์ ์ ๋ํด ์ ๋๋ก ์๊ฐํ์ง ๋ชปํ ๊ฒ ๊ฐ์
์กฐ๊ธ ์์ฌ์ด ๋ง์์ด ๋๋- ๋ค์ ํฌ์คํธ๋ ํด๋น ๋ด์ฉ์ ์ค๋นํด ์ฐพ์์ค๋๋ก ํ๊ฒ ์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค :) !
โฌ๏ธ ์ง๊ธ ๊ตฌ๊ธ ํ๋ ์ด ์คํ ์ด์์ ํฐ๋ ๋ค์ด ๋ฐ๊ธฐ
https://play.google.com/store/apps/details?id=com.team7.tikkle&hl=ko-KR
๐ฉ Contact : yuu-jeong@naver.com
๐ฒ SNS : https://instagram.com/yu.eek
'๐ฉโ๐ป TECH' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TECH] GitHub Actions๋ก CI/CD ๊ตฌ์ถํ๊ธฐ(1) (0) | 2023.08.15 |
---|---|
[TECH] Android Studio๋ก ๋ค์ํ ๊ธฐ๊ธฐ ํ๋ฉด์ ๋์ํ๊ธฐ (0) | 2023.08.07 |
[TECH] Cloudwatch Logs๋ก ๋ก๊ทธ ํ์ผ ์์งํ๊ธฐ (1) | 2023.07.26 |
[TECH] Android Kotlin์ผ๋ก ๊ฐ๋จํ ๋ฐ์ดํฐ ์ ์ฅํ๊ธฐ (4) | 2023.07.20 |
[TECH] Android ViewBinding์ด๋? (5) | 2023.07.13 |