paging3๋ pagination, paging์ผ๋ก ๋ถ๋ฆฌ๋ ๊ธฐ๋ฒ(์ดํ ํ์ด์ง)์ ์๋๋ก์ด๋์์ ์ข ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๊ฐ๋ฐ๋์ด ์ ๊ณต๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, Android Jetpack์ ๊ตฌ์ฑ ์์์ด๋ค.
ํ์ด์ง์ด๋ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ์ชผ๊ฐ์ด ํ์ด์ง๋ผ๋ ๊ฐ์์ ๋จ์๋ก ๋ก๋ํ๋ ๊ธฐ๋ฒ์ด๋ค.
๋ก์ปฌ ์ ์ฅ์๋ ๋คํธ์ํฌ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ๋ ์์คํ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๊ฒ ๋๊ณ , ๊ฒฝ์ฐ์ ๋ฐ๋ผ์ ๋คํธ์ํฌ ๋์ญํญ์ ์ฌ์ฉํ๊ฒ ๋๋ค.
์์คํ ๋ฆฌ์์ค์ ๋คํธ์ํฌ ๋์ญํญ์ ํ์ ์ ์ธ ์์์ด์ง๋ง, ์ด์ ์ฌ์ฉ๋์ ๋ฐ์์ฌ ๋ฐ์ดํฐ์ ๊ท๋ชจ์ ๋น๋กํ๊ฒ ์ปค์ง๋ ๊ฒฝํฅ์ด ์๋ค๋ ์ ์์ ํ์ด์ง์ด ์๋ฏธ๊ฐ ์๋ค.
ํ์ด์ง ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ, ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ํ๋ฒ์ ๋ฐ์์ค๋ ๋์ , ๋น์ฅ ํ์ํ ๋ฐ์ดํฐ๋ง ๊ทธ๋ ๊ทธ๋ ๋ฐ์์จ๋ค๋ฉด ์๋์ ๊ฐ์ ์ฅ์ ์ด ์๋ค.
์ด๋ฐ์ paging3์ Android์ ๊ด๋ จํ ๋ค์ํ ์ฅ์ ์ ๊ฐ์ง๊ณ ์๋ค.
- ํ์ด์ง๋ ๋ฐ์ดํฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ด ์บ์ฑ. ์ด๋ ๊ฒ ํ๋ฉด ์ฑ์ด ํ์ด์ง ๋ฐ์ดํฐ๋ก ์์ ํ๋ ๋์ ์์คํ ๋ฆฌ์์ค๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์์ฒญ ์ค๋ณต ์ ๊ฑฐ ๊ธฐ๋ฅ์ด ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณต๋์ด ์ฑ์์ ๋คํธ์ํฌ ๋์ญํญ๊ณผ ์์คํ ๋ฆฌ์์ค๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์ฌ์ฉ์๊ฐ ๋ก๋๋ ๋ฐ์ดํฐ์ ๋๊น์ง ์คํฌ๋กคํ ๋ ๊ตฌ์ฑ ๊ฐ๋ฅํ
RecyclerView
์ด๋ํฐ๊ฐ ์๋์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฒญํฉ๋๋ค.- Kotlin ์ฝ๋ฃจํด ๋ฐ Flow๋ฟ๋ง ์๋๋ผ
LiveData
๋ฐ RxJava๋ฅผ ์ต๊ณ ์์ค์ผ๋ก ์ง์ํฉ๋๋ค.- ์๋ก๊ณ ์นจ ๋ฐ ์ฌ์๋ ๊ธฐ๋ฅ์ ํฌํจํ์ฌ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ง์ํฉ๋๋ค.
์๋ ๊ทธ๋ฆผ์ ์๋๋ก์ด๋ ๊ฐ๋ฐ์๋ผ๋ฉด, ์ต์ํ ์๋๋ก์ด๋ ๊ถ์ฅ ์ํคํ ์ฒ ๊ตฌ์กฐ๋์ด๋ค. MVVM์ ๊ธฐ๋ฐํ ๊ตฌ์กฐ๋ก ์ดํดํ ์ ์๋ค. Android Jetpack์ ๊ตฌ์ฑ ์์์ธ ๋งํผ Paging3 ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์๋๋ก์ด๋ ๊ถ์ฅ ์ํคํ ์ฒ์ ๋ง๊ฒ ์ค๊ณ๋์๋ค. ๋ฐ๋ผ์ ๋ค๋ฅธ Android Jetpack์ ๊ตฌ์ฑ ์์์ ์ฐฐ๋ก๊ถํฉ์ ๋ณด์ฅํ๋ค.
์ด๊ฒ์ด Paging3 ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ด๋ถ ๊ตฌ์กฐ์ด๋ค. Paging3๋ ๊ฐ๊ฐ์ ์ญํ ๋ถ๋ฆฌ์ ์ญํ ์ ๋ฐ๋ผ ์ ์ ํ ๊ณ์ธต ๋ถ๋ฆฌ๋ฅผ ํ๊ณ ์๋ค. ๊ฐ ๊ณ์ธต์ ๊ตฌ์ฑํ๊ณ ์๋ ๊ตฌ์ฑ์์๋ค์ ์ญํ ์ ๋ํด ์ ๋ฆฌํด๋ณด๊ฒ ๋ค.
PagingData
์ ํฉํ ๋ฆฌ, ์์ฑ์๋ก ์ดํดํ ์ ์๋ค.Pager
= PagingSource
+ PagingConfig
+ initialKey + remoteMediator
(optional)DiffUtil.ItemCallback
๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๊ทธ๋ผ ์ค๋๋ ํ์ดํ ์ ๋๋ค ๐ฟ ๊ฐ ์์ด์ ํ์ ํด์