๐กํด๋น ๊ธ์ ์ฑ ์ํคํ ์ฒ ๊ฐ์ด๋๋ฅผ ์ดํดํ๊ธฐ ์ฝ๊ฒ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
์ด ๊ธ์ ๋ค์๊ณผ ๊ฐ์ ์ ์์ง์์ ํ์๋กํฉ๋๋ค.
UI Layer๋ ์ํ ๋ฐ UI Logic์ด ํฌํจ๋์ง๋ง, Data Layer๋ Business Logic์ด ํฌํจ๋๋ ์์ญ์ ๋๋ค.
Business Logic์ ๋ฐ์ดํฐ์ ์์ฑ, ์ ์ฅ, ๋ณ๊ฒฝ ๋ฐฉ์์ ๊ฒฐ์ ํฉ๋๋ค.
UseCase, ์ ๋ฌด ๊ท์น, ํต์ฌ ๋ก์ง๊ณผ ๊ฐ์ ๋จ์ด๋ก๋ ์ข ์ข ํํ๋ฉ๋๋ค.
Data Layer๋ 0๊ฐ ๋ถํฐ ์ฌ๋ฌ ๊ฐ์ DataSource๋ฅผ ํฌํจํ๋ Repository๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
์ฑ์์ ์ฒ๋ฆฌํ๋ ๋ค์ํ ์ ํ์ ๋ฐ์ดํฐ๋ณ๋ก Repository๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
์๋ฅผ๋ค์ด ์ํ์ ๊ด๋ จ๋ Repository๋ MoviesRepository
, ๊ฒฐ์ ์ ๊ด๋ จ๋ Repository๋ PaymentsRepository
์ ๊ฐ์ด ๋ง๋ค ์ ์์ต๋๋ค.
ํ์ผ, ๋คํธ์ํฌ, ๋ก์ปฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ ํ๋์ DataSource๋ง ์ฌ์ฉํด์ผ ํฉ๋๋ค.
DataSource๋ ์ฑ๊ณผ ์์คํ ๋ฐ์ดํฐ ๊ฐ์ ์ค๊ฐ ๋ค๋ฆฌ ์ญํ ์ ์ํํฉ๋๋ค.
๋ค๋ฅธ ๋ ์ด์ด๋ ๋ฐ์ดํฐ ์์ค์ ์ง์ ์ก์ธ์คํด์๋ ์ ๋ฉ๋๋ค.
๋ฐ์ดํฐ ์์ญ์ ์ง์
์ ์ ํญ์ ์ ์ฅ์ ํด๋์ค์ฌ์ผ ํฉ๋๋ค.
๋ฐ๋ผ์ ViewModel
์์๋ Repository
๋ฅผ ํตํด DataSource
๋ฅผ ์ฌ์ฉํ์ฌ์ผํฉ๋๋ค.
๋ํ ์ฌ๊ธฐ์์ ๋ ธ์ถ๋ ๋ฐ์ดํฐ๋ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํด์ผํฉ๋๋ค. ๊ทธ๋์ผ ๋ฐ์ดํฐ์ ๋ถ์ผ์น ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์๋ ๋ค๋ฅธ ํด๋์ค์ ์ํ ์กฐ์์ด ๋ถ๊ฐ๋ฅํด์ง๋๋ค. ๋ํ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ ์ฌ๋ฌ ์ค๋ ๋์์ ์์ ํ๊ฒ ์ฒ๋ฆฌ๋ ์ ์์ต๋๋ค.
class ExampleRepository(
private val exampleRemoteDataSource: ExampleRemoteDataSource, // network
private val exampleLocalDataSource: ExampleLocalDataSource // database
) { /* ... */ }
Repository์ ์ด๋ฆ ์ง์ ๊ท์น
๋ฐ์ดํฐ ์ ํ + ์ ์ฅ์
DataSource์ ์ด๋ฆ ์ง์ ๊ท์น
๋ฐ์ดํฐ ์ ํ + ์์ค ์ ํ + DataSource
์์ค ์ ํ์ ๊ฒฝ์ฐ ๊ตฌํ์ด ๋ณ๊ฒฝ๋ ์ ์์ผ๋ฏ๋ก ์ผ๋ฐ์ ์ธ Remote
, Local
์ ์ฌ์ฉํฉ๋๋ค.
๊ตฌํ ์ธ๋ถ์ ๋ณด์ ๋ฐ๋ผ ๋ฐ์ดํฐ ์์ค์ ์ด๋ฆ์ ์ง์ ํ๋ฉด ์๋ฉ๋๋ค.
ex) UserDaoDataSource, UserApiDataSource, UserSharedPreferencesDataSource
๋ก์ปฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก Room์ ์ฌ์ฉํ์ค ์ ์์ต๋๋ค.
๋ก์ปฌ์ ํค-๊ฐ ์์ ์ ์ฅํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก DataStore๋ฅผ ์ฌ์ฉํ์ค ์ ์์ต๋๋ค.
SharedPreferences๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋์ Datastore๋ก ์ด์ ํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
JSON ๊ฐ์ฒด๋ ๋นํธ๋งต๊ณผ ๊ฐ์ ํฐ ๊ฐ์ฒด๋ก ์์ ํ ๋๋ File๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ด๋ค ์ฑ์ด ๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋์ด ์๋ ํ ํน์ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๊ฐ์ ธ์ค๋ ๊ธฐ๋ฅ์ ์ํํด์ผํ๋ค๊ณ ์๊ฐํด๋ด ์๋ค. ์ด๋ด๋ ์ฌ์ฉํ ์ ์๋ ์๊ตฌ ์์ ์ ๊ถ์ฅ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ต๋๋ค.
WorkManager๋ ์ ๋ขฐํ ์ ์๋ ๋น๋๊ธฐ ์์ ์ ์ฝ๊ฒ ์์ฝํ ์ ์์ผ๋ฉฐ ์ ์ฝ ์กฐ๊ฑด์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ ๊ธฐ๊ธฐ๊ฐ ์ฐ๊ฒฐ๋์ง ์์๋ ์ต๊ทผ ๋ฐ์ดํฐ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
์คํ๋ผ์ธ ์ฐ์ ์ฑ์ ์ธํฐ๋ท ์ฐ๊ฒฐ์ด ์์ด๋ ์ฑ์ ๋ชจ๋ ๊ธฐ๋ฅ ๋๋ ์ค์ํ ํต์ฌ ๊ธฐ๋ฅ์ ์คํํ ์ ์๋ ์ฑ์ ๋๋ค. ์ฆ, ๋น์ฆ๋์ค ๋ก์ง์ ์ผ๋ถ ๋๋ ์ ๋ถ๋ฅผ ์คํ๋ผ์ธ์ผ๋ก ์คํํ ์ ์์ต๋๋ค.
์๋์ ๊ฐ์ ๊ธฐ์ค์ ์ถฉ์กฑํ๋ ์ฑ์ ์คํ๋ผ์ธ ์ฐ์ ์ฑ์ด๋ผ๊ณ ํฉ๋๋ค.
์ฝ๊ธฐ ์ฐ๊ธฐ, ๋๊ธฐํ, ์ถฉ๋์ ๊ดํ ์ ๋ณด๋ ๊ณต์๋ฌธ์์์ ํ์ธํ ์ ์์ต๋๋ค.
https://developer.android.com/topic/architecture?hl=ko
https://developer.android.com/courses/android-basics-kotlin/course
https://github.com/android/sunflower/tree/main
https://fastcampus.co.kr/dev_red_ksr