๐ก์๋๋ก์ด๋ ์ํคํ ์ฒ ํจํด์์ Data Layer ์ญํ ์ ๋ด๋นํ๋ Repository, DataSourece์ ๋ํ์ฌ ๊ธฐ๋กํ์์ต๋๋ค.
์ํคํ ์ฒ ์์น
- ์ฑ ์ปดํฌ๋ํธ๋ฅผ ์ค๊ณํ ๋ ๋ฐ์ดํฐ ๋ชจ๋ธ์์ UI๋ฅผ ๋์ถํด์ผ ํ๋๋ฐ ๊ฐ๊ธ์ ์ด๋ฉด ์ง์์ ์ธ ๋ชจ๋ธ์ด ๊ถ์ฅ๋ฉ๋๋ค.
- ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฑ ์ํคํ ์ฒ๋ฅผ ๊ตฌ์ถํ๋ฉด ํ ์คํธ ๊ฐ๋ฅ์ฑ๊ณผ ๊ฒฌ๊ณ ์ฑ์ด ๋์์ง๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
- ๋ฐ์ดํฐ ๋ชจ๋ธ์ UI์์๋ ๊ธฐํ ์ปดํฌ๋ํธ๋ค๊ณผ ๋ ๋ฆฝ๋์ด ์๋๋ฐ, ์ง์์ ์ธ ๋ฐ์ดํฐ ๋ชจ๋ธ์ด ์ด์์ ์ธ ์ํคํ ์ฒ ํจํด์ด ๋ ์ ์์ต๋๋ค.
์ง์์ ์ธ ๋ฐ์ดํฐ ๋ชจ๋ธ
- OS์์ ๋ฆฌ์์ค๋ฅผ ํ๋ณดํ๊ธฐ ์ํด ์ฑ์ ์ ๊ฑฐํด๋ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋์ง ์์ต๋๋ค.
- ๋คํธ์ํฌ ์ฐ๊ฒฐ์ด ๋ถ์์ ํ๊ฑฐ๋ ๋น์ฐ๊ฒฐ ์ํ์๋ ์ฑ์ด ๋์ ํฉ๋๋ค.
SSOT
- Single source of truth์ ์ฝ์๋ก ๋จ์ผ ์์ค ์ ์ฅ์๋ฅผ ๋ปํฉ๋๋ค.
- Repository์ ๋ ธ์ถ๋๋ ๋ฐ์ดํฐ๋ ํญ์ ์ ๋ขฐํ ์ ์๋ ์์ค์์ ์ง์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ์ด์ด์ผ ํฉ๋๋ค.
- ์ด๋ ์ผ๊ด๋๊ณ ์ต์ ํ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํด์ผ ํ๋ฉฐ, ํน์ ์ ํ ๋ฐ์ดํฐ์ ๋ชจ๋ ๋ณ๊ฒฝ์ฌํญ์ ํ ๊ณณ์์ ๊ด๋ฆฌํฉ๋๋ค.
- ๋ค๋ฅธ ์ ํ์ด ์กฐ์ํ ์ ์๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๊ณ , ๋ณ๊ฒฝ์ฌํญ์ ์ฝ๊ฒ ์ถ์ ํ์ฌ ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํฉ๋๋ค.
์์ค์ ์ถ์ฒ๋ ๋ก์ปฌ ๋ฐ์ดํฐ ์์ค์ผ ์๋ ์๊ณ , Repository์ ํฌํจ๋ ์ ์๋ ์ธ๋ฉ๋ชจ๋ฆฌ ์บ์์ผ ์๋ ์์ต๋๋ค. ๋ด๋ถ์์๋ง ์์ ์ด ๊ฐ๋ฅํ๊ณ , ์ธ๋ถ์์๋ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ๋๋ก ๊ตฌํํ์ฌ ์ฑ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ถ ํด๋์ค๋ก๋ถํฐ ๋ณดํธํ ์ ์์ด์ผ ํฉ๋๋ค.
Data Layer
- ๋ฐ์ดํฐ ๊ณ์ธต์ ๊ฐ N๊ฐ์ ๋ฐ์ดํฐ ์์ค๋ฅผ ํฌํจํ ์ ์๋ Repository๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ์ดํฐ ๋ฐ ๋น์ฆ๋์ค ๋ก์ง์ด ํฌํจ๋๋ฉฐ, ์ฌ๊ธฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฑ์ ๊ฐ์น๋ฅผ ๋ถ์ฌํ๋ ์์๋ก ๋ฐ์ดํฐ ์ ์ฅ, ์์ฑ, ๋ณ๊ฒฝ ๋ฐฉ์์ ๊ฒฐ์ ํ๋ ๊ท์น์ ๋๋ค.
https://developer.android.com/topic/architecture/data-layer?hl=ko
๋ฐ์ดํฐ ๋ ์ด์ด ์ํคํ ์ฒ
- ๋ฐ์ดํฐ ๋ ์ด์ด๋ 0๊ฐ๋ถํฐ n๊ฐ์ ๋ฐ์ดํฐ ์์ค๋ฅผ ๊ฐ๊ฐ ํฌํจํ ์ ์๋ ์ ์ฅ์(Repository)๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- ์ฑ์์ ์ฒ๋ฆฌํ๋ ๋ค์ํ ์ ํ์ ๋ฐ์ดํฐ๋ณ๋ก ์ ์ฅ์ ํด๋์ค๋ฅผ ๋ง๋ค์ด์ผ ํ๋ฉฐ, ๊ฐ ํด๋์ค๋ ๋ค์๊ณผ ๊ฐ์ ์ญํ ์ ๊ฐ์ง๋๋ค.
- ์ฑ์ ๋๋จธ์ง ๋ถ๋ถ์ ๋ฐ์ดํฐ ๋ ธ์ถ
- ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ฌํญ์ ํ ๊ณณ์ ์ง์ค
- ์ฌ๋ฌ ๋ฐ์ดํฐ ์์ค ๊ฐ์ ์ถฉ๋ ํด๊ฒฐ
- ์ฑ์ ๋๋จธ์ง ๋ถ๋ถ์์ ๋ฐ์ดํฐ ์์ค ์ถ์ํ
- ๋น์ฆ๋์ค ๋ก์ง ํฌํจ
๊ฐ์ฅ ์ค์ํ ์ ์ ํด๋น ๋ ์ด์ด์์ ๋ ธ์ถ๋ ๋ฐ์ดํฐ๋ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํด์ผ ํฉ๋๋ค. ๊ทธ๋์ผ ๊ฐ์ ์ผ๊ด๋์ง ์์ ์ํ๋ก ๋ง๋ค ์ํ์ด ์๋ ๋ค๋ฅธ ํด๋์ค์ ์ํ ์กฐ์์ด ๋ถ๊ฐ๋ฅํด์ง๋๋ค. ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ ์ฌ๋ฌ ์ค๋ ๋์์ ์์ ํ๊ฒ ์ฒ๋ฆฌ๋ ์ ์์ต๋๋ค.
์ฌ๋ฌ ์์ค์ Data Layer
- ๋ ๋ณต์กํ ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ์ด ํฌํจ๋ ์ผ๋ถ ๊ฒฝ์ฐ์๋ ์ ์ฅ์๊ฐ ๋ค๋ฅธ ์ ์ฅ์์ ์ข ์๋์ด์ผ ํ ์ ์์ต๋๋ค.
- ๊ด๋ จ๋ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ ๋ฐ์ดํฐ ์์ค์ ์ง๊ณ์ด๊ฑฐ๋ ์ฑ ์์ด ๋ค๋ฅธ ์ ์ฅ์ ํด๋์ค์ ์บก์ํ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ผ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
Repository
- Repository ํจํด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ ์์ค ์ ๊ทผ์ ๋จ์ผ ์ง์ ์ ์ผ๋ก ์ ๊ณตํ๋ ํจํด์ ๋๋ค.
- ์ด๋ฅผ ํตํด ๋น์ฆ๋์ค ๋ก์ง์ด๋ ViewModel์ด ๋ฐ์ดํฐ ์์ค์ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ ์ ํ์ ์์ด, Repository๋ฅผ ํตํด ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
๋ชฉ์
- ๋ฐ์ดํฐ ์ ๊ทผ์ ์ถ์ํํ์ฌ ๋ฐ์ดํฐ ์์ค ๊ต์ฒด๊ฐ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
- ๋ฐ์ดํฐ ์์ค์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ ๋, ๋น์ฆ๋์ค ๋ก์ง์ ์์ ํ ํ์๊ฐ ์์ด์ง๋๋ค.
- ์ฌ๋ฌ ๋ฐ์ดํฐ ์์ค๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ๋จ์ผ Repository๋ฅผ ํตํด ์ ๊ทผํฉ๋๋ค.
- Repository๋ฅผ Mockingํ์ฌ ํ ์คํธ๊ฐ ์ฉ์ดํด์ง๋๋ค.
DataSource
- DataSource ํจํด์ ๋ฐ์ดํฐ๋ฅผ ์ค์ ๋ก ๊ฐ์ ธ์ค๋ ์ญํ ์ ํ๋ ๊ตฌ์ฒด์ ์ธ ๋ฐ์ดํฐ ์์ค์ ๋ํ ํจํด์ ๋๋ค.
- ๋ก์ปฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๋คํธ์ํฌ API, ์บ์์ ๊ฐ์ ์ฌ๋ฌ ๊ฐ์ง ๊ตฌํ์ฒด๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
๋ชฉ์
- ๊ตฌ์ฒด์ ์ธ ๋ฐ์ดํฐ ์ ๊ทผ ๋ก์ง์ ๊ตฌํํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์ญํ ์ ์ํํฉ๋๋ค.
- ๊ฐ ๋ฐ์ดํฐ ์์ค์ ๋ํ ๊ตฌ์ฒด์ ์ธ ๋ก์ง์ ์บก์ํํ์ฌ, ์์ค ๊ฐ์ ์ํฅ์ ๋ฏธ์น์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- Repository๋ฅผ ํตํด ์ฌ๋ฌ ๋ฐ์ดํฐ ์์ค์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํฉํ๊ฑฐ๋ ๊ฒฐํฉํ ์ ์์ต๋๋ค.
Repository/DataSource ํจํด์ ๊ตฌ์กฐ
Repository
- ๋ฐ์ดํฐ ์์ค์ ๋จ์ผ ์ง์ ์ ์ญํ ์ ํ๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ง๊ฒ ์ฒ๋ฆฌํ๊ฑฐ๋ ๊ฐ๊ณตํฉ๋๋ค.
LocalDataSource
- ๋ก์ปฌ ์ ์ฅ์์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ตฌ์ฒด์ ์ธ DataSource์ ๋๋ค.
RemoteDataSource
- ๋คํธ์ํฌ API๋ ์๊ฒฉ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ DataSource์ ๋๋ค.
ViewModel, UseCase
- Repository๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ฉฐ, ๊ตฌ์ฒด์ ์ธ ๋ฐ์ดํฐ ์์ค์ ์์กดํ์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ์ง์คํฉ๋๋ค.
- UseCase๋ฅผ ํตํด ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ์ง ์๊ณ , ํ๋์ ๊ธฐ๋ฅ์ฉ๋ง ์ด๋ฆ์ ๋ช ์ํ์ฌ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
์ ๋ฆฌ
- Repository/DataSource ํจํด์ ์๋๋ก์ด๋ ์ฑ์์ ๋ฐ์ดํฐ ์ ๊ทผ์ ์ถ์ํํ๊ณ , ๋ฐ์ดํฐ ์์ค ๋ณ๊ฒฝ์ ์ ์ฐํ๊ฒ ๋์ํ ์ ์๋๋ก ์ค๊ณ๋ ํจํด์ ๋๋ค.
- ๋ค์ํ ๋ฐ์ดํฐ ์์ค์์ ๋ฐ์ดํฐ๋ฅผ ํตํฉ ๊ด๋ฆฌํ๊ณ , ๋น์ฆ๋์ค ๋ก์ง๊ณผ UI ๋ก์ง์์ ๋ฐ์ดํฐ ์ ๊ทผ ๋ฐฉ๋ฒ์ ์จ๊ธธ ์ ์์ต๋๋ค.
์ฐธ๊ณ
https://velog.io/@hs0204/์๋๋ก์ด๋-์ํคํ ์ฒ๋ฅผ-๊ณต๋ถํด๋ณด์