Skip to content

๐Ÿ„ ๋ฉ”๋ถ•์ด๋“ค์„ ์œ„ํ•œ ์ด๋ฒคํŠธ ์ผ์ • ์•Œ๋ฆฌ๋ฏธ

Notifications You must be signed in to change notification settings

littlesam95/MapleCalendar

Folders and files

NameName
Last commit message
Last commit date

Latest commit

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

Repository files navigation

๐Ÿ„ ๋ฉ”์ดํ”Œ ์บ˜๋ฆฐ๋”

"์˜ค๋Š˜ ์ง„ํ–‰ํ•˜๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ญ์ง€? ์ด๋ฒคํŠธ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์„œ ๋ชจ๋ฅด๊ฒ ๋„คโ€ฆ"

๊ทธ๋Ÿฐ ๋ฉ”๋ถ•์ด๋“ค์„ ์œ„ํ•œ ์ด๋ฒคํŠธ ์ผ์ • ์•Œ๋ฆฌ๋ฏธ, ๋ฉ”์ดํ”Œ ์บ˜๋ฆฐ๋”

  • ์ˆ˜๋งŽ์€ ์ด๋ฒคํŠธ ์ผ์ •์„ ํ•œ ๋ˆˆ์— ํ™•์ธํ•˜์ž
  • ์˜ค๋Š˜ ๋ฌด์Šจ ์ด๋ฒคํŠธ๊ฐ€ ์ข…๋ฃŒ๋˜๋Š”์ง€ ์•Œ๋ฆผ๋ฐ›์ž
  • ํŠน์ • ๋‚ ์งœ์— ๋ฌด์Šจ ์ด๋ฒคํŠธ๊ฐ€ ์žˆ๋Š”์ง€ ์ˆ™์ง€ํ•˜์ž
  • ๊ทธ ์™ธ์— ๊ฐ„๋‹จํ•˜๊ฒŒ ๋‚ด ์บ๋ฆญํ„ฐ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์•Œ์•„๋ณด์ž

๊ตฌ๊ธ€ ํ”Œ๋ ˆ์ด์Šคํ† ์–ด์—์„œ ๋‚ด๋ถ€ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ

  • ๋‚ด๋ถ€ ํ…Œ์ŠคํŠธ ์ ‘์† ๋งํฌ

๐Ÿ“’ ์ฃผ์š” ๊ธฐ๋Šฅ

์˜ค๋Š˜ ์ง„ํ–‰์ค‘์ธ ์ด๋ฒคํŠธ ํ™•์ธ

  • ์ด๋ฒคํŠธ๋ฅผ ํด๋ฆญํ•˜๋ฉด ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€๋กœ ์ด๋™๋œ๋‹ค.

ํŠน์ • ๋‚ ์งœ์— ์ง„ํ–‰ํ•  ์ด๋ฒคํŠธ ํ™•์ธ

  • ๋‹ฌ๋ ฅ์˜ ํŠน์ • ๋‚ ์งœ๋ฅผ ํด๋ฆญํ•ด ์ง„ํ–‰ํ•˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ํ™•์ธํ•˜์ž.

์ด๋ฒคํŠธ ์•Œ๋ฆฌ๋ฏธ๋กœ ๋‹น์ผ ์ข…๋ฃŒ๋˜๋Š” ์ด๋ฒคํŠธ ํ™•์ธ

  • ๋งค์ผ 00์‹œ๋งˆ๋‹ค ๋‹น์ผ ์ข…๋ฃŒ๋˜๋Š” ์ด๋ฒคํŠธ์˜ ๊ฐœ์ˆ˜๋ฅผ ์•Œ๋ฆผ๋ฐ›์ž.

ํŠน์ • ์บ๋ฆญํ„ฐ์˜ ์ƒ์„ธ ์ •๋ณด(์ข…ํ•ฉ ๋Šฅ๋ ฅ์น˜ ๋ฐ ์žฅ๋น„) ํ™•์ธ

  • ์ •๋ณด๊ฐ€ ๊ถ๊ธˆํ•œ ์บ๋ฆญํ„ฐ์˜ ์ข…ํ•ฉ ๋Šฅ๋ ฅ์น˜์™€ ์žฅ๋น„๋ฅผ ํ™•์ธํ•ด๋ณด์ž.

โš’ ๊ธฐ์ˆ ์Šคํƒ

Category TechStack
Architecture MVVM
Network Retrofit, OkHttp, Moshi
DI Hilt
Asynchronous Coroutines
Jetpack DataBinding, Navigation, Fragment, Lifecycle, Material Design Components
Image Coil
Notification AlarmManager with BroadcastReceiver
CI/CD Firebase App Distribution, Google Play Store
Logging Timber

๐Ÿ’ฌ ๊ธฐ์ˆ ์  ๊ณ ๋ฏผ๊ณผ ์„ ํƒ

1. AlarmManager with BroadcastReceiver

  • Service์™€ BroadcastReceiver๋กœ ์•ฑ์ด ์ผœ์ ธ ์žˆ์„ ๋•Œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ƒํƒœ์—์„œ๋„, ์•ฑ์ด ๊บผ์ง„ ์ƒํƒœ์—์„œ๋„, ์‹ฌ์ง€์–ด ๊ธฐ๊ธฐ๊ฐ€ ์ž ๊ธˆ์ธ ์ƒํƒœ์—์„œ๋„ ๋งค์ผ 00์‹œ์— ๊ฑฐ์˜ ์ •ํ™•ํ•˜๊ฒŒ ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Œ.
  • AlarmManager์˜ setAlarmClock()๊ณผ PendingIntent๋ฅผ ์ •์˜ํ•ด์„œ ๋งค์ผ 00์‹œ์— BroadcastReceiver๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , BroadcastReceiver์—์„œ NotificationManager๋ฅผ ์ •์˜ํ•˜๊ณ  notify()๋กœ ์•Œ๋ฆผ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Œ.
  • ํ•˜์ง€๋งŒ setAlarmClock()์€ ๋ฐ˜๋ณต์ด ๋ถˆ๊ฐ€๋Šฅํ–ˆ๊ณ , ๋ฐ˜๋ณต ์•Œ๋žŒ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด onReceive()์—์„œ ๋‹ค์‹œ ๋‹ค์Œ ๋‚  00์‹œ์— ์•Œ๋ฆผ์„ ์˜ˆ์•ฝํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์˜€์Œ.

2. Calendar with Custom View

  • ์ขŒ์šฐ ์Šค์™€์ดํ”„๊ฐ€ ๋˜๋Š” ๋‹ฌ๋ ฅ View๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•˜์—ฌ ViewPager2๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Œ.
  • ViewPager2์— ์‚ฌ์šฉํ•  Fragment๋Š” ์—ฐ์›”์„ ๋‚˜ํƒ€๋‚ด๋Š” TextView์™€, ๋‹ฌ๋ ฅ UI๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” Custom ViewGroup์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Œ.
  • ViewGroup์€ ์š”์ผ์ด๋‚˜ ๋‚ ์งœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” View๋“ค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ณ , ViewGroup์—์„œ ์š”์ผ ๋ฐ ๋‚ ์งœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” View์˜ layout์„ ๊ตฌ์„ฑํ•จ.
  • ์š”์ผ View๋Š” ํšŒ์ƒ‰ ๋ฐฐ๊ฒฝ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ๋‚ ์งœ View๋Š” ํ„ฐ์น˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ  ํ„ฐ์น˜ ์‹œ ํ•ด๋‹น ๋‚ ์งœ๋ฅผ ์บ๋ฆญํ„ฐ ์กฐํšŒ ๋‚ ์งœ๋กœ ์ดˆ๊ธฐํ™”ํ•จ.
    • View๋ฅผ ํ„ฐ์น˜ํ•  ๋•Œ MotionEvent๋ฅผ ๊ด€์ฐฐํ•˜๋ฉฐ, ํ„ฐ์น˜ ์‹œ์ž‘ ์‹œ ํ•ด๋‹น View์˜ ๋ฐฐ๊ฒฝ์ƒ‰์ด ๋ฐ”๋€Œ๋ฉฐ ์†๊ฐ€๋ฝ์„ ๋–ผ๊ฑฐ๋‚˜ ๋ถ€๋ชจ View๊ฐ€ ํ„ฐ์น˜ ์ด๋ฒคํŠธ๋ฅผ ๊ฐ€์ ธ๊ฐ€๊ธฐ ์ „๊นŒ์ง€ ์œ ์ง€๋จ.

3. Clean Architecture

  • UI Layer
    • UI Layer๋Š” Domain Layer์—์„œ ์ž‘์„ฑํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ UseCase๋ฅผ ์˜์กดํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
    • ๋”ฐ๋ผ์„œ Domain Layer์— ์˜์กดํ•˜๊ฒŒ ๋œ๋‹ค.
    • Repository์— ์˜์กดํ–ˆ์—ˆ๋˜ ViewModel์€ Domain Layer์˜ UseCase์— ์˜์กดํ•˜์—ฌ, ์‚ฌ์šฉ์ž๊ฐ€ App์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ˆ˜ํ–‰ํ• , Domain Layer์— ์ •์˜๋œ ๋ชจ๋“  ๋™์ž‘์„ ๊ทธ์ € ์‚ฌ์šฉํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.
  • Domain Layer
    • Domain Layer์˜ ํŠน์ง•์œผ๋กœ๋Š”, ์–ด๋– ํ•œ Layer์—๋„ ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋ฉฐ ๊ทธ์— ๋”ฐ๋ผ Kotlin ์ฝ”๋“œ๋กœ๋งŒ ์ž‘์„ฑํ•˜๊ฒŒ ๋œ๋‹ค. ๋˜ํ•œ gradle์— ๋‹ค๋ฅธ ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์ถ”๊ฐ€ํ•  ํ•„์š”๊ฐ€ ์—†๊ฒŒ ๋œ๋‹ค.
    • Domain Layer์—์„œ๋Š” UI์„ ๊ทธ๋ ค๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  Entity, ๊ทธ๋ฆฌ๊ณ  Entity๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ Repository Interface, ๋งˆ์ง€๋ง‰์œผ๋กœ UseCase๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.
    • UseCase
      • ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” User๊ฐ€ ํ•ด๋‹น ์„œ๋น„์Šค๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•˜๋Š” ๊ฒƒ์„ UseCase๋ผ๊ณ  ํ•œ๋‹ค.
        • ์˜ˆ๋ฅผ ๋“ค๋ฉด ์–ด๋–ค ์•ฑ์„ ์ผœ์„œ ๋กœ๊ทธ์ธ์„ ํ•˜๊ฑฐ๋‚˜, ์–ด๋–ค ์ƒํ’ˆ ์ •๋ณด๋ฅผ ๋ณด๊ฑฐ๋‚˜ ํ•˜๋Š” ๋“ฑ ์„œ๋น„์Šค์—์„œ ์ˆ˜ํ–‰ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ๋“ค์ด UseCase๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.
      • Screaming Architecture : ์–ด๋–ค ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š”์ง€ ์ง๊ด€์ ์œผ๋กœ ํŒŒ์•…์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๋Š” Architecture์ด๋ฉฐ, Android์—์„œ๋Š” ViewModel์ด ์–ด๋–ค UseCase์— ์˜์กดํ•˜๋„๋ก ๊ตฌํ˜„ํ•จ์œผ๋กœ์จ ํ•ด๋‹น ViewModel์ด ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š”์ง€๋ฅผ ์ง๊ด€์ ์œผ๋กœ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
      • ๋˜ํ•œ, UseCase์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— Repository์— ์ง์ ‘ ์˜์กดํ•˜์ง€ ์•Š๊ฒŒ ๋œ๋‹ค. UseCase์—์„œ ์ง์ ‘ Repository์— ์˜์กดํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ฐ–๊ฒŒ ๋˜๊ณ , ViewModel์€ ์˜์กดํ•˜๊ณ  ์žˆ๋Š” UseCase ๋‚ด๋ถ€์— ์ž‘์„ฑ๋œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋ฉฐ, ์ด๋ ‡๊ฒŒ ์˜์กด์„ฑ์„ ์ค„์ž„์œผ๋กœ์จ ํŠน์ • ๋กœ์ง์— ๋Œ€ํ•œ ์ˆ˜์ •์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
      • UseCase๋Š” ์ด๋ฆ„๋งŒ ๋ด๋„ ์–ด๋–ค ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ๋ช…์‹œํ•˜์—ฌ์•ผ ํ•œ๋‹ค.(์˜ˆ๋ฅผ ๋“ค๋ฉด ๋กœ๊ทธ์ธ์„ ํ•œ๋‹ค๋Š” UseCase๋ผ๋ฉด LoginUseCase)
      • Repository ๋‚ด๋ถ€์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ๋งŒ ํ•˜๋Š” UseCase์˜ ๊ฒฝ์šฐ invoke()๋ผ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ž‘์„ฑํ•จ์œผ๋กœ์จ Class๋ช…๋งŒ์œผ๋กœ ํ˜ธ์ถœํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, UseCase ๋‚ด๋ถ€์—์„œ ๋งŽ์€ ๋กœ์ง์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ execute() ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒˆ๋กœ ์ •์˜ํ•œ๋‹ค.
  • Data Layer
    • Data Layer์—์„œ๋Š” ์„œ๋ฒ„์™€์˜ ํ†ต์‹  ๋กœ์ง์ธ api, ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค์ธ model, ๊ทธ๋ฆฌ๊ณ  Domain Layer์—์„œ ์„ ์–ธํ•œ Repository Interface๋ฅผ ์ƒ์†๋ฐ›์€ RepositoryImpl๊ณผ API ๋“ฑ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ CRUDํ•˜๋Š” DataSource๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.
    • ์—ฌ๊ธฐ์„œ API์— ๋งž์ถฐ ๊ตฌํ˜„ํ•˜๋Š” DataSource๊ฐ€ RemoteDataSource์ด๋‹ค.

4. Hilt

  • ์˜์กด์„ฑ ์—ญ์ „ ์›์น™์— ๋”ฐ๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ Hilt๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค.
  • Hilt๋Š” Dagger๋ณด๋‹ค๋„ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๊ฐ„์†Œํ™”๋˜์–ด์žˆ์œผ๋ฉฐ, Android ํด๋ž˜์Šค์— ์ตœ์ ํ™”๋˜์–ด์žˆ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.
  • Hilt๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.
    • ๊ฐ€์žฅ ๋จผ์ € MainApplication์— @HiltAndroidApp ์–ด๋…ธํ…Œ์ด์…˜์„ ์ง€์ •ํ•œ๋‹ค. ํ•ด๋‹น App์€ ์˜์กด์„ฑ์„ ์ œ๊ณตํ•˜๋Š” Component์˜ ์—ญํ• ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.
    • @InstallIn(SingletonComponent::class) ์–ด๋…ธํ…Œ์ด์…˜์„ ์ง€์ •ํ•จ์œผ๋กœ์จ App ์ „์—ญ์—์„œ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•  ๊ฒƒ์ž„์„ ๋‚˜ํƒ€๋‚ด๊ณ , @Module ์–ด๋…ธํ…Œ์ด์…˜์„ ์ง€์ •ํ•จ์œผ๋กœ์จ ๋ชจ๋“ˆ์„ ์ƒ์„ฑํ•˜์—ฌ Component ์—ญํ• ์„ ํ•˜๋Š” Android App์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๊ณ , Android App์— ์ €์žฅํ•œ ๋งŒํผ Android์˜ ์ƒ๋ช…์ฃผ๊ธฐ ๋™์•ˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
    • @Provides ์–ด๋…ธํ…Œ์ด์…˜์„ ์ง€์ •ํ•œ ๋ชจ๋“ˆ ๋‚ด ๋ฉ”์†Œ๋“œ๋Š” ์ข…์†์„ฑ์„ ์ œ๊ณตํ•˜๊ณ  Hilt์— ์˜ํ•ด ์ฃผ์ž…๋  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
    • Android์˜ Component์—๋Š” @AndroidEntryPoint ์–ด๋…ธํ…Œ์ด์…˜์„ ์ง€์ •ํ•˜์—ฌ Hilt๊ฐ€ ํ•ด๋‹น ํด๋ž˜์Šค์˜ ์ข…์†์„ฑ์„ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
    • @Inject ์–ด๋…ธํ…Œ์ด์…˜์„ ์ง€์ •ํ•œ ์ƒ์„ฑ์ž์— ๋Œ€ํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ Hilt๊ฐ€ ์ž๋™์œผ๋กœ ์ฃผ์ž…ํ•˜๊ฒŒ ๋œ๋‹ค.

5. Custom View๋กœ ์Šคํƒ€ํฌ์Šค ๋‹ฌ์•„์ฃผ๊ธฐ

  • ์Šคํƒ€ํฌ์Šค View๋ฅผ RecyclerView๋กœ ๊ตฌํ˜„ํ•  ๋ฐฉ๋ฒ•์„ ์ฐพ์ง€ ๋ชป ํ•ด์„œ Custom View๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
    • ์ผ๋‹จ ์Šคํƒ€ํฌ์Šค๋Š” ๋ณ„ ๊ฐ„์˜ ์œ„์น˜๊ฐ€ ์ผ์ •ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ฐ„๊ฒฉ๋„ ๋‹ค๋ฅด๋‹ค.
    • ๋”ฐ๋ผ์„œ RecyclerView๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ์—๋Š” ๋ฌด๋ฆฌ๊ฐ€ ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•˜์˜€๋‹ค.
  • ์Šคํƒ€ํฌ์Šค๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ„์˜ ViewGroup์„ ๋จผ์ € ์ •์˜ํ•˜๊ณ , ๋ฏธ๋ฆฌ ์ •์˜ํ•œ ์†์„ฑ์„ ๋ฐ”ํƒ•์œผ๋กœ ViewGroup์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•  View์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ width์™€ height๋ฅผ ์ธก์ •ํ•œ๋‹ค.
    • ์—ฌ๊ธฐ์„œ 5๋ฒˆ์งธ View์™€ 6๋ฒˆ์งธ View ๊ฐ„์˜ ๊ฐ„๊ฒฉ์ด ์กฐ๊ธˆ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— View์˜ width์˜ ์ ˆ๋ฐ˜๋งŒํผ ViewGroup์˜ width๋ฅผ ๋Š˜๋ฆฐ๋‹ค.
  • ์•„์ดํ…œ์˜ ์Šคํƒ€ํฌ์Šค๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ถ”๊ฐ€ํ•ด์•ผ ํ•  ๋…ธ๋ž€ ๋ณ„๊ณผ ํšŒ์ƒ‰ ๋ณ„์˜ ๊ฐœ์ˆ˜๋ฅผ ์ •ํ•œ๋‹ค.

6. ViewPager2์™€ TabLayout์œผ๋กœ ํ”„๋ฆฌ์…‹์„ ์ขŒ์šฐ ์Šค์™€์ดํ”„๋กœ ํ™•์ธํ•˜๊ธฐ

  • ํ•˜์ดํผ ์Šคํƒฏ, ์–ด๋นŒ๋ฆฌํ‹ฐ UI๋ฅผ ํฌํ•จํ•œ DialogFragment ๋‚ด๋ถ€์— ViewPager2์™€ TabLayout์„ ๋ฐฐ์น˜ํ•˜์˜€๋‹ค.
  • ViewPager2์— ์‚ฌ์šฉํ•  Fragment ๋‚ด๋ถ€์— RecyclerView๋ฅผ ๋ฐฐ์น˜ํ•˜์—ฌ, List ํ˜•ํƒœ์˜ ํ”„๋ฆฌ์…‹ ๋ฐ์ดํ„ฐ๋ฅผ RecyclerView Adapter๋กœ ๋ณด์—ฌ์ค€๋‹ค.
  • ViewPager2์™€ TabLayout์„ TabLayoutMediator๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ์ขŒ์šฐ ์Šค์™€์ดํ”„๋ฅผ ํ•˜๋ฉด ํ”„๋ฆฌ์…‹ ๋ฒ„ํŠผ์˜ ์ƒํƒœ๋„ ๋ฐ”๋€Œ๊ณ , ํ”„๋ฆฌ์…‹ ๋ฒ„ํŠผ์„ ํ„ฐ์น˜ํ•˜๋ฉด ์ขŒ์šฐ ์Šค์™€์ดํ”„ ์• ๋‹ˆ๋ฉ”์ด์…˜์œผ๋กœ ํ”„๋ฆฌ์…‹ ํ™”๋ฉด์„ ๋ฐ”๊พธ๋„๋ก ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

Document

Static Badge

About

๐Ÿ„ ๋ฉ”๋ถ•์ด๋“ค์„ ์œ„ํ•œ ์ด๋ฒคํŠธ ์ผ์ • ์•Œ๋ฆฌ๋ฏธ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages