- ๋ฐ์ฝ๋ ์ธ์์ ํตํ ์ฑ ๋ฑ๋ก
- ๋ ์ ๊ธฐ๋ก ํ์ด๋จธ
- ๋ฌ๋ ฅ์ ํตํ ๋ ์ ๊ธฐ๋ก ํ์ธ
- ์ฑ ์ ๋ํ ํ์คํ์ ๋จ๊ธฐ๋ ์ค๋ํ์ค
- ๋ชฉํ ๋ ์์๊ฐ ์ค์
- ํธ์ ์๋ฆผ
KakaoTalk_Video_2023-12-23-14-53-35.mp4
๋ณธ ํ๋ก์ ํธ๋ ํฌ๊ฒ 5๊ฐ์ง ๋ ์ด์ด๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ๋ํ ๊ธฐ๋ฅ์ ์๋์ ๊ฐ์ต๋๋ค.
- app : applicationํด๋์ค ๋ฐ shared preference์ ์ด๊ธฐํ์์ , ์์กด์ฑ ์ฃผ์
- presentation : ํ๋ฉด ๋ฐ ํ๋ฉด์ ์ฌ์ฉ๋๋ UI์ ์ธ ์์
- domain : ์ฑ์์ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ ํด๋์ค ๋ฐ ๋น์ค๋์ค ๋ก์ง
- data : apiํธ์ถ๊ณผ ๊ฐ์ ๋คํธ์ํฌ ์์ ๋ฐ ๋ก์ปฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์์ ์ ์ํ
- core : retrofit, okhttp, room, dataStore ์ ์, ํ๋ก์ ํธ ์ ์ฒด์ ์ผ๋ก ์ฌ์ฉ๋๋ ํด๋์ค
๋ํ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฒ์ ผ ๊ด๋ฆฌ๋ gradle/libs.versions.toml ์์ ๊ด๋ฆฌํ๊ณ ์์ต๋๋ค.
- Data๋ ์ด์ด์ Repository ๊ตฌํ์ฒด๋ Hilt๋ฅผ ์ฌ์ฉํ์ฌ ์ฃผ์ ๋๋ฉฐ, app ๋ชจ๋์ app.di ํจํค์ง์ ๋ช ์๋์ด ์์ต๋๋ค.
- ์ ๊ทธ๋ํ์์ DataSource๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ฐ๋ก Repository ๊ตฌํ์ฒด์์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ๊ฒฝ์ฐ๋ ์กด์ฌํฉ๋๋ค.
๋ถ์ผ | ๊ธฐ์ ์คํ |
---|---|
์ธ์ด | Kotlin |
UI | Xml, ViewBinding |
์์กด์ฑ ์ฃผ์ | Dagger Hilt |
๊ตฌ์กฐ | Clean Architecture, MVVM, MVI |
jetpack | CameraX, Navigation |
๋ฐ์ดํฐ๋ฒ ์ด์ค | Room |
๋น๋๊ธฐ ์ฒ๋ฆฌ | Flow, Coroutine |
ํ์ฌ app๊ณผ presentation์ app ๋ชจ๋์ ์กด์ฌํ๋ฉฐ ๋๋จธ์ง domain, data, core๋ ๋ณ๋์ ๋ชจ๋๋ก ๋ถ๋ฆฌ๋์ด ์์ต๋๋ค.
๊ฐ ๋ชจ๋ ๋ด readme์ ์์ธํ ๋ด์ฉ ๋ฐ ์์กด์ฑ ๊ด๊ณ๊ฐ ๋ช
์๋์ด ์์ต๋๋ค.
- ๋ชจ๋์ ์ํธ ์ฐธ์กฐ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์ ๋์ผํ ๋ ์ด์ด์ ๋ฐฐ์น๋ ๋ชจ๋๊ฐ์๋ ์์กด์ฑ์ ๊ฐ์ง ์ ์์ต๋๋ค.
์์ 1) data.book ๋ชจ๋์ data.user ๋ชจ๋์ ์ฐธ์กฐํ ์ ์์ต๋๋ค. - domain๋ ์ด์ด์ ๋ชจ๋์ core๋ ์ด์ด์ ๋ชจ๋๋ง์ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
์์ 2_1) domain.book ๋ชจ๋์ data.book ๋ชจ๋์ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
์์ 2_2) domain.book ๋ชจ๋์ core.model ๋ชจ๋์ ์ฐธ์กฐํ ์ ์์ต๋๋ค. - data๋ ์ด์ด ๋ชจ๋์ core๋ ์ด์ด ๋ชจ๋๊ณผ data๋ ์ด์ด ๋ชจ๋๋ง์ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
์์ 3_1) data.book ๋ชจ๋์ app ๋ชจ๋์ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
์์ 3_2) data.book ๋ชจ๋์ domain.book ๋ชจ๋์ ์ฐธ์กฐํ ์ ์์ต๋๋ค. - app ๋ชจ๋ ๋ด presentation ํจํค์ง๋ domain, core๋ ์ด์ด ๋ชจ๋๋ง์ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
์์ 4) app ๋ชจ๋ ๋ด presentation ํจํค์ง๋ data.book ๋ชจ๋์ ์กด์ฌํ๋ ํด๋์ค ๋ฐ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋์ domain.book์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
- di : ์์กด์ฑ ์ฃผ์ ๋ชจ๋
- shared_preference : sharedPreference ์ฑ๊ธํค ๊ฐ์ฒด
- DefaultApplication.kt : ์ดํ๋ฆฌ์ผ์ด์ ํด๋์ค
- adapter : RecyclerView, ViewPager2์ ์ด๋ํฐ
- base : ViewBindingActivity, ViewBindingFragment์ ๊ฐ์ ๊ธฐ๋ณธ Activity, Fragment ํด๋์ค
- screens : ๊ฐ ํ๋ฉด์ ๋ํ ํด๋์ค
- [ํ๋ฉด์ด๋ฆ]
- [ํ๋ฉด์ด๋ฆ]Activity.kt
- [ํ๋ฉด์ด๋ฆ]ViewModel.kt
- [์ธ๋ถํ๋ฉด์ด๋ฆ] : ์ธ๋ถ ํ๋ฉด(fragment)์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ
- [์ธ๋ถํ๋ฉด์ด๋ฆ]Fragment.kt
- [์ธ๋ถํ๋ฉด์ด๋ฆ]ViewModel.kt
- component : ํด๋น ํ๋ฉด์์๋ง ์ฌ์ฉ๋๋ CustomView
- model : ํด๋น ํ๋ฉด์์๋ง ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ ํด๋์ค
- [ํ๋ฉด์ด๋ฆ]
- models : presentation layer์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐ์ดํฐ ํด๋์ค
- util : presentation layer์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ ํธ ํจ์
domain ๋ ์ด์ด๋ appinfo, book, login, oneline, user ๋ชจ๋๋ก ์ธ๋ถ ๋ถ๋ฆฌ๋์ด ์์ต๋๋ค. ๊ฐ ๋ชจ๋ ๋ด์ ํด๋๊ตฌ์กฐ๋ ์๋์ ๊ฐ์ต๋๋ค.
- useCase : presentation์ viewModel ํด๋์ค์์ ์ฌ์ฉํ useCase ์ ์
- repository : data ๋ ์ด์ด์์ ์ฌ์ฉํ๋ repository์ ์ธํฐํ์ด์ค ์ ์ธ
- model : ์ฑ์์ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ ํด๋์ค
data ๋ ์ด์ด๋ appinfo, book, google_auth, oneline, token, user ๋ชจ๋๋ก ์ธ๋ถ ๋ถ๋ฆฌ๋์ด ์์ต๋๋ค. ๊ฐ ๋ชจ๋ ๋ด์ ํด๋๊ตฌ์กฐ๋ ์๋์ ๊ฐ์ต๋๋ค.
- datasource : repository๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋์์ธ ๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ๊ตฌํํ ํด๋์ค
- repository : domain ๋ ์ด์ด์์ ์ ์ํ repository ์ธํผํ ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค
- model : DTO, RequestBody, ResponseBody๊ฐ์ด data ๋ ์ด์ด์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ ํด๋์ค (dto)
- util : data ๋ ์ด์ด์์ ์ฌ์ฉํ๋ ์ ํธ ํจ์
core ๋ชจ๋์ ์ฑ ์ ์ฒด์์ ๊ณตํต์ผ๋ก ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ๋ค์ด ๋ฐฐ์น๋์ด ์์ต๋๋ค.