Skip to content

๐Ÿ“” ์ „์ž์ฑ…๋ณด๋‹ค ์ข…์ด์ฑ…์„ ๋” ์„ ํ˜ธํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ ๋…์„œ ์ปค๋ฎค๋‹ˆํ‹ฐ ์•ฑ

Notifications You must be signed in to change notification settings

Bookmark-Oneday/Bookmark-Android

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

์ฑ…๊ฐˆํ”ผ:์˜ค๋Š˜ํ•œ์ค„ - AOS

์ฑ…๊ฐˆํ”ผ:์˜ค๋Š˜ํ•œ์ค„์€ ์‚ฌ์šฉ์ž์˜ ๋…์„œ ์š•๊ตฌ๋ฅผ ์ฆ์ง„์‹œํ‚ค๊ณ , ๋…์„œ ๊ฒฝํ—˜์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋…์„œ ์ „๋ฌธ ์ปค๋ฎค๋‹ˆํ‹ฐ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ

  • ๋ฐ”์ฝ”๋“œ ์ธ์‹์„ ํ†ตํ•œ ์ฑ… ๋“ฑ๋ก
  • ๋…์„œ ๊ธฐ๋ก ํƒ€์ด๋จธ
  • ๋‹ฌ๋ ฅ์„ ํ†ตํ•œ ๋…์„œ ๊ธฐ๋ก ํ™•์ธ
  • ์ฑ…์— ๋Œ€ํ•œ ํ•œ์ค„ํ‰์„ ๋‚จ๊ธฐ๋Š” ์˜ค๋Š˜ํ•œ์ค„
  • ๋ชฉํ‘œ ๋…์„œ์‹œ๊ฐ„ ์„ค์ •
  • ํ‘ธ์‹œ ์•Œ๋ฆผ

์Šคํฌ๋ฆฐ์ƒท ๋ฐ ์‹œ์—ฐ ์˜์ƒ

แ„‹แ…ฉแ„‚แ…ณแ†ฏแ„’แ…กแ†ซแ„Œแ…ฎแ†ฏ_example

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. ๋ชจ๋‘˜์˜ ์ƒํ˜ธ ์ฐธ์กฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋™์ผํ•œ ๋ ˆ์ด์–ด์— ๋ฐฐ์น˜๋œ ๋ชจ๋“ˆ๊ฐ„์—๋Š” ์˜์กด์„ฑ์„ ๊ฐ€์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
    ์˜ˆ์‹œ 1) data.book ๋ชจ๋“ˆ์€ data.user ๋ชจ๋“ˆ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  2. domain๋ ˆ์ด์–ด์˜ ๋ชจ๋“ˆ์€ core๋ ˆ์ด์–ด์˜ ๋ชจ๋“ˆ๋งŒ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ์˜ˆ์‹œ 2_1) domain.book ๋ชจ๋“ˆ์€ data.book ๋ชจ๋“ˆ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
    ์˜ˆ์‹œ 2_2) domain.book ๋ชจ๋“ˆ์€ core.model ๋ชจ๋“ˆ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. data๋ ˆ์ด์–ด ๋ชจ๋“ˆ์€ core๋ ˆ์ด์–ด ๋ชจ๋“ˆ๊ณผ data๋ ˆ์ด์–ด ๋ชจ๋“ˆ๋งŒ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ์˜ˆ์‹œ 3_1) data.book ๋ชจ๋“ˆ์€ app ๋ชจ๋“ˆ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
    ์˜ˆ์‹œ 3_2) data.book ๋ชจ๋“ˆ์€ domain.book ๋ชจ๋“ˆ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. app ๋ชจ๋“ˆ ๋‚ด presentation ํŒจํ‚ค์ง€๋Š” domain, core๋ ˆ์ด์–ด ๋ชจ๋“ˆ๋งŒ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ์˜ˆ์‹œ 4) app ๋ชจ๋“ˆ ๋‚ด presentation ํŒจํ‚ค์ง€๋Š” data.book ๋ชจ๋“ˆ์— ์กด์žฌํ•˜๋Š” ํด๋ž˜์Šค ๋ฐ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  domain.book์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

app

  • di : ์˜์กด์„ฑ ์ฃผ์ž… ๋ชจ๋“ˆ
  • shared_preference : sharedPreference ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด
  • DefaultApplication.kt : ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํด๋ž˜์Šค

presentation

  • 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

domain ๋ ˆ์ด์–ด๋Š” appinfo, book, login, oneline, user ๋ชจ๋“ˆ๋กœ ์„ธ๋ถ€ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋ชจ๋“ˆ ๋‚ด์˜ ํด๋”๊ตฌ์กฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • useCase : presentation์˜ viewModel ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉํ•  useCase ์ •์˜
  • repository : data ๋ ˆ์ด์–ด์—์„œ ์‚ฌ์šฉํ•˜๋Š” repository์˜ ์ธํ„ฐํŽ˜์ด์Šค ์„ ์–ธ
  • model : ์•ฑ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค

data

data ๋ ˆ์ด์–ด๋Š” appinfo, book, google_auth, oneline, token, user ๋ชจ๋“ˆ๋กœ ์„ธ๋ถ€ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋ชจ๋“ˆ ๋‚ด์˜ ํด๋”๊ตฌ์กฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • datasource : repository๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋Œ€์ƒ์ธ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค
  • repository : domain ๋ ˆ์ด์–ด์—์„œ ์ •์˜ํ•œ repository ์ธํผํ…Œ์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค
  • model : DTO, RequestBody, ResponseBody๊ฐ™์ด data ๋ ˆ์ด์–ด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค (dto)
  • util : data ๋ ˆ์ด์–ด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์œ ํ‹ธ ํ•จ์ˆ˜

core

core ๋ชจ๋“ˆ์€ ์•ฑ ์ „์ฒด์—์„œ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ๋“ค์ด ๋ฐฐ์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

About

๐Ÿ“” ์ „์ž์ฑ…๋ณด๋‹ค ์ข…์ด์ฑ…์„ ๋” ์„ ํ˜ธํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ ๋…์„œ ์ปค๋ฎค๋‹ˆํ‹ฐ ์•ฑ

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages