Skip to content

๐Ÿ๏ธ ๋ฐ”์ดํฌ ๋ผ์ด๋”๋“ค์„ ์œ„ํ•œ ์ฝ”์Šค ๊ด€๋ฆฌ ์•ฑ

Notifications You must be signed in to change notification settings

Goohyun3436/BariBari

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

10 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

iOS 17.0+ Swift 5.0 Xcode 16.2 RxSwift 6.9.0 RealmSwift lang

๐Ÿ๏ธ ๋ฐ”๋ฆฌ๋ฐ”๋ฆฌ BariBari

'๋ฐ”๋ฆฌ๋ฐ”๋ฆฌ'๋Š” ๋ผ์ด๋”๋“ค์„ ์œ„ํ•œ ์ฝ”์Šค ๊ด€๋ฆฌ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜(iOS)์ž…๋‹ˆ๋‹ค.

ย 

โœ“ ๊ฐœ๋ฐœ ์ธ์› ๋ฐ ๊ธฐ๊ฐ„

  • ๊ธฐ๊ฐ„: 2025.04.01 ~ 2025.04.07 [7์ผ] (์—…๋ฐ์ดํŠธ ์ง„ํ–‰ ์ค‘)

  • ์ธ์›: Goo [1๋ช…]

ย 

โœ“ ์•ฑ ์†Œ๊ฐœ

๋ฐ”์ดํฌ ๋ผ์ด๋”ฉ์„ ํ•˜๋‹ค๋ณด๋ฉด ์˜ˆ์ƒ์น˜ ๋ชปํ•˜๊ฒŒ ์˜ˆ์œ ๊ธธ์„ ๋งˆ์ฃผํ•  ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์‚ฌ์ง„์„ ์ฐ๊ฑฐ๋‚˜ ์ง€๋„์— ๊ธฐ๋กํ•  ํ‹ˆ๋„ ์—†์ด ์ง€๋‚˜์ณค๋˜ ๊ทธ ๊ธธ๋“ค์„,
๊ฐ„๋‹จํ•œ ์กฐ์ž‘๋งŒ์œผ๋กœ ์‹ค์‹œ๊ฐ„ ๊ฒฝ๋กœ๋ฅผ ์ถ”์ ํ•˜๊ณ  ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

ย 

โœ“ ์•ฑ ๊ธฐ์ˆ  ์Šคํƒ

์•„ํ‚คํ…์ฒ˜/๋””์ž์ธ ํŒจํ„ด

  • MVVM + Input-Output
  • Repository
  • Router (API request routing)
  • BaseView/BaseViewModel/BaseViewController

ํ”„๋ ˆ์ž„์›Œํฌ

  • UIKit
  • WidgetKit
  • MapKit
  • CoreLocation
  • PhotosUI

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • RxSwift
    • RxCoreLocation RxMKMapView RxGesture RxDataSources
  • Realm RealmDatabase RealmSwift
  • Firebase
    • FirebaseAnalyticsWithoutAdIdSupport
    • FirebaseCrashlytics
  • Kingfisher
  • SnapKit
  • IQKeyboard

ย 

โœ“ ์•ฑ ์ฃผ์š” ๊ธฐ๋Šฅ

๐ŸŒ• ๋ผ์ดํŠธ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿž๏ธ ์ด์ „์— ๊ธฐ๋กํ–ˆ๋˜ ์ฝ”์Šค๋ฅผ ์œ„์ ฏ์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

ํ™ˆ ํ™”๋ฉด์—์„œ ์ด์ „์— ๋‹ฌ๋ ธ๋˜ ์ฝ”์Šค ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฌด์ž‘์œ„๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ” ์„œ์šธ ๊ทผ๊ต ๋Œ€ํ‘œ ๋ฐ”์ดํฌ ์ฝ”์Šค๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

๋ถ„์œ„๊ธฐ, ๊ฒฝ๋กœ, ํฌ์ธํŠธ๋ฅผ ํ•œ๋ˆˆ์— ํ™•์ธํ•˜๊ณ  ์˜ค๋Š˜์˜ ๋ชฉ์ ์ง€๋ฅผ ์‰ฝ๊ฒŒ ์ •ํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋‚ด ์œ„์น˜๋ฅผ ์ถ”์ ํ•ด ์ฝ”์Šค๋ฅผ ์ž๋™์œผ๋กœ ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์•ฑ์„ ์‚ฌ์šฉ ์ค‘์ด๊ฑฐ๋‚˜ ํ™”๋ฉด ์ž ๊ธˆ ์‹œ์—๋„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ—บ๏ธ ์‚ฌ์ง„, ๋ฉ”๋ชจ, ๋‚ ์งœ, ๊ฒฝ๋กœ์™€ ํ•จ๊ป˜ ์ฝ”์Šค๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“‚ ์›ํ•˜๋Š” ์ฝ”์Šค ๋ถ„์œ„๊ธฐ๋‚˜ ํ…Œ๋งˆ์— ๋”ฐ๋ผ ํด๋”๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“ฆ ๋ณด๊ด€ํ•จ์—์„œ ์ €์žฅํ•œ ์ฝ”์Šค์˜ ๊ธฐ๋ก๊ณผ ์ถœ๋ฐœ์ง€, ๊ฒฝ์œ ์ง€, ๋„์ฐฉ์ง€๊นŒ์ง€ ์–ธ์ œ๋“  ๋‹ค์‹œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ๐Ÿป ๋ณด๊ด€ํ•จ์˜ ์ฝ”์Šค ํด๋”๋Š” ์ˆ˜์ • ๋ฐ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ๐Ÿป ๋ณด๊ด€ํ•จ์˜ ์ฝ”์Šค๋Š” ์ˆ˜์ • ๋ฐ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ย 

โœ“ ๊ธฐ์ˆ ์  ๋„์ „

RxSwift

  • View์™€ ViewModel ๊ฐ„์˜ ๋ณต์žกํ•œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๋ฅผ input, output ๊ตฌ์กฐ๋กœ ๋ฐ”์ธ๋”ฉํ•˜์—ฌ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์˜€์Šต๋‹ˆ๋‹ค.

  • ์—ฌ๋Ÿฌ API ์š”์ฒญ์„ ๋™์‹œ์— ๋ณด๋‚ด๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์•„์„œ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ์— Single.zip(_:) ์กฐํ•ฉ ์—ฐ์‚ฐ๊ณผ flatMap, observe(on:) ์—ฐ์‚ฐ์ž๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ โ†’ ๋™๊ธฐ ์ „ํ™˜ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์œ„์น˜ ๊ถŒํ•œ ์ œ์–ด

  • CoreLocationManager์„ ํ†ตํ•ด ์œ„์น˜ ๊ถŒํ•œ ์ƒํƒœ์— ๋”ฐ๋ฅธ ์˜ˆ์™ธ ์ผ€์ด์Šค๋ฅผ ์„ธ๋ฐ€ํ•˜๊ฒŒ ๊ณ ๋ คํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • Info.plist ์„ค์ •๊ณผ CLAuthorizationStatus์˜ ๋ณ€ํ™”์— ๋”ฐ๋ฅธ ์ ์ ˆํ•œ UI ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์•ˆ์ •์ ์œผ๋กœ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋ชจ๋ธ๊ฐ„ ๊ณ„์ธต ๋ถ„๋ฆฌ

  • API ๊ตฌ์กฐ / DB ์Šคํ‚ค๋งˆ / UI ์š”๊ตฌ์‚ฌํ•ญ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๊ฐ ๋ ˆ์ด์–ด์˜ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ์ˆ˜์ • ๋ฒ”์œ„๋ฅผ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • API โ†” View โ†” Realm ๊ฐ„์˜ ํ๋ฆ„์—์„œ DTO๋ฅผ ๋„์ž…ํ•˜์—ฌ ์„œ๋กœ์˜ ๊ตฌํ˜„์— ์ข…์†๋˜์ง€ ์•Š๋„๋ก ์„ค๊ณ„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ปดํฌ๋„ŒํŠธ ์ค‘์‹ฌ ์„ค๊ณ„

  • ๊ธฐ๋Šฅ ๋‹จ์œ„ ๋ชจ๋“ˆํ™” ๋ฐ ์—ญํ•  ๊ธฐ๋ฐ˜ ์ฑ…์ž„ ๋ถ„๋ฆฌ(SRP) ๋ฅผ ํ†ตํ•ด, ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ, ์œ ์ง€๋ณด์ˆ˜์„ฑ, ํ™•์žฅ์„ฑ์„ ํ™•๋ณดํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ์ง€๋„์™€ ์œ„์น˜ ๊ธฐ๋ฐ˜ ๊ธฐ๋Šฅ์€ CoreLocationManager๋ฅผ ํ†ตํ•œ ์œ„์น˜ ์ฒ˜๋ฆฌ ๋กœ์ง๊ณผ, Custom MKMapView๋ฅผ ํ†ตํ•œ ์‹œ๊ฐํ™” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ, ์œ„์น˜ ์ฒ˜๋ฆฌ์™€ UI ํฌํ˜„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”์—ˆ์Šต๋‹ˆ๋‹ค.

  • ๊ณตํ†ต UI ์š”์†Œ๋Š” ์ปค์Šคํ…€ ์ปดํฌ๋„ŒํŠธ๋กœ ์ถ”์ƒํ™”ํ•˜์—ฌ ์•ฑ ์ „์ฒด์— ์ผ๊ด€๋œ ๋””์ž์ธ๊ณผ ์ฝ”๋“œ ์Šคํƒ€์ผ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

ย 

โœ“ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

์œ„์น˜ ๊ถŒํ•œ ๋ณ€๊ฒฝ ์‹œ ์ง€๋„ ๋“ฑ ๋ทฐ์— ๋ฐ˜์‘์ด ์—†๋˜ ๋ฌธ์ œ

  • ๋ฌธ์ œ ์ƒํ™ฉ

    • ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ ์‹คํ–‰ ์ค‘ ์œ„์น˜๊ถŒํ•œ์„ ๋ณ€๊ฒฝ(๋ฐฑ๊ทธ๋ผ์šด๋“œ โ†’ ๊ฑฐ๋ถ€) ํ–ˆ์„ ๋•Œ, CoreLocationManager๋Š” ๊ถŒํ•œ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ–ˆ์ง€๋งŒ MKMapView๋“ฑ ๋ทฐ์—๋Š” ๋ณ€๊ฒฝ๋œ ๊ถŒํ•œ์— ๋Œ€ํ•œ UI ํ”ผ๋“œ๋ฐฑ์ด ๋ฐ˜์˜๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.

    • ์œ„์น˜๋ฅผ ์ถ”์ ํ•˜์—ฌ ๊ธฐ๋ก ์ค‘์ด์—ˆ๋‹ค๊ฑฐ๋‚˜, ๋ณด๊ด€ํ•จ์—์„œ ์ด์ „์— ๊ธฐ๋กํ–ˆ๋˜ ๊ฒฝ๋กœ๋ฅผ ํ™•์ธ ์ค‘์ด์—ˆ๋‹ค๋ฉด ํ˜„์žฌ ์ž‘์—…์„ ์ค‘๋‹จํ•˜๊ณ  ํ™”๋ฉด ์ด๋™ ๋˜๋Š” ์„ค์ • ํ™”๋ฉด์œผ๋กœ ์ด๋™์„ ์œ ๋„ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์›์ธ ๋ถ„์„

    • CoreLocationManager๋ฅผ ํ†ตํ•œ ์œ„์น˜ ์ฒ˜๋ฆฌ ๋กœ์ง๊ณผ, Custom MKMapView๋ฅผ ํ†ตํ•œ ์‹œ๊ฐํ™” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์™„์ „ํžˆ ๋ถ„๋ฆฌํ•œ ์ƒํƒœ์˜€๊ธฐ ๋•Œ๋ฌธ์—, ๊ถŒํ•œ ๋ณ€๊ฒฝ ์‹œ ๋ณ„๋„์˜ notification์ด๋‚˜ ์ฝœ๋ฐฑ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

    • didChangeAuthorization ๋‚ด๋ถ€์—์„œ ์œ„์น˜ ๊ถŒํ•œ ์ƒํƒœ๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ, ์œ„์น˜ ๊ถŒํ•œ ๋ณ€๊ฒฝ ์‹œ rootViewController์— ์œ„์น˜ ๊ถŒํ•œ ํ—ˆ์šฉ์„ ์œ ๋„ํ•˜๋Š” permissionAlert๋ฅผ ๋„์›Œ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

    • cancel Action handler ์—๋Š” ํ˜„์žฌ ์ถ”์  ์ค‘์ธ ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋‹ค๋ฉด UserDefault์— ์ž„์‹œ ์ €์žฅ๋˜๋„๋ก ํ•˜์—ฌ ์œ ์ €์—๊ฒŒ ์•ˆ์ •์ ์ธ UX๋ฅผ ์ œ๊ณตํ•˜์˜€์Šต๋‹ˆ๋‹ค.

    • setting Action hanler ์—๋Š” ์„ค์ • ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•˜๋Š” ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜์—ฌ ์œ„์น˜ ๊ถŒํ•œ์„ ํ—ˆ์šฉํ•˜๋„๋ก ์œ ๋„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ๊ฒฐ๊ณผ

    • ์•ฑ ์‹คํ–‰ ์ค‘ ๊ถŒํ•œ ๋ณ€๊ฒฝ ์‹œ์— ์ ์ ˆํ•œ UI ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜๊ณ , ๊ธฐ๋ก ์ค‘์ด์—ˆ๋˜ ์ •๋ณด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด๊ด€ํ•˜์—ฌ UX์™€ ๊ธฐ๋Šฅ ์•ˆ์ •์„ฑ์ด ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ย 

์—ฌ๋Ÿฌ API ์š”์ฒญ ๊ฒฐ๊ณผ๋ฅผ UI์— ์•ˆ์ •์ ์œผ๋กœ ๋ฐ˜์˜ํ•˜๋Š” ํ๋ฆ„ ์„ค๊ณ„

  • ๋ฌธ์ œ ์ƒํ™ฉ

    • ์‚ฌ์šฉ์ž๊ฐ€ ์ฝ”์Šค๋ฅผ ์ €์žฅํ•  ๋•Œ์—, ์ถœ๋ฐœ์ง€ / ๊ฒฝ์œ ์ง€(5๊ฐœ) / ๋„์ฐฉ์ง€์˜ ์œ„๊ฒฝ๋„์— ๋”ฐ๋ฅธ ์ฃผ์†Œ๊ฐ’์„ ๋ฐ›์•„์˜ค๋Š” API ์š”์ฒญ์„ ๋™์‹œ์— ๋ณด๋‚ด๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์•„์„œ Realm ์ €์žฅํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

    • ํ•˜์ง€๋งŒ ์ถœ๋ฐœ์ง€ / ๊ฒฝ์œ ์ง€(5๊ฐœ) / ๋„์ฐฉ์ง€์˜ ์œ„๊ฒฝ๋„๋ฅผ ๋ฐฐ์—ด๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์—ˆ๊ณ , API ์š”์ฒญ์ด ๋น„๋™๊ธฐ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ„๊ฒฝ๋„ ์ˆœ์„œ๊ฐ€ ์ผ๊ด€๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ Realm์— ์ €์žฅ๋˜๊ฑฐ๋‚˜ ์ผ๋ถ€ ๊ฒฝ์œ ์ง€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ˆ„๋ฝ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ์›์ธ ๋ถ„์„

    • ๊ฐ ์œ„๊ฒฝ๋„ ๊ฐ’์— ๋Œ€ํ•œ API ์š”์ฒญ์ด ๋น„๋™๊ธฐ๋กœ ๊ฐœ๋ณ„ ์ฒ˜๋ฆฌ๋˜๋ฉด์„œ, ์‘๋‹ต์ด ๋„์ฐฉํ•˜๋Š” ์ˆœ์„œ๊ฐ€ ๋‹ฌ๋ผ์กŒ๊ณ  ๊ทธ๋กœ ์ธํ•ด ์›๋ž˜์˜ ์œ„์น˜ ๋ฐฐ์—ด ์ˆœ์„œ์™€ ๋งคํ•‘๋˜์ง€ ์•Š์€ ์ฃผ์†Œ ๋ฐ์ดํ„ฐ๊ฐ€ Realm์— ์ €์žฅ ๋˜๊ฑฐ๋‚˜ ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

    • ๊ฐ API ์š”์ฒญ์„ ํ•˜๋‚˜์˜ Single๋กœ ๊ฐ์‹ธ๊ณ , Single.zip(\_:) ์กฐํ•ฉ ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ์š”์ฒญ์˜ ๊ฒฐ๊ณผ๋ฅผ ํ•˜๋‚˜์˜ Single๋กœ ๋ฌถ์–ด ์‘๋‹ต ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๊ณ , ๋ชจ๋“  ์š”์ฒญ์ด ์™„๋ฃŒ๋œ ํ›„์— ๋‹ค์Œ ๋กœ์ง์œผ๋กœ ์ง„ํ–‰ํ•˜๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

    • ์‚ฌ์šฉ์ž์˜ ์ €์žฅ ๋ฒ„ํŠผ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์—๋Š” flatMapLatest๋ฅผ ์ ์šฉํ•˜์—ฌ ๊ฐ€์žฅ ์ตœ์‹ ์˜ ์ €์žฅ ์š”์ฒญ๋งŒ ์œ ํšจํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋„๋ก ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

    • ๊ฒฐ๊ณผ๊ฐ€ UI์— ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐ˜์˜๋˜๋„๋ก .observe(on: MainScheduler.instance)๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ, UI ์—…๋ฐ์ดํŠธ๋ฅผ Main Thread์—์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋ช…์‹œํ•˜์˜€์Šต๋‹ˆ๋‹ค.

    ์‚ฌ์šฉ์ž ์ €์žฅ ๋ฒ„ํŠผ ํƒญ
       โ†“
    Observable ์ŠคํŠธ๋ฆผ (์ฝ”์Šค ์ •๋ณด)
       โ†“
    flatMapLatest โ†’ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ (์ฝ”์Šค์— ๋ˆ„๋ฝ๋œ ์ •๋ณด ์—†๋Š” ์ง€)
       โ†“
    Observable ์ŠคํŠธ๋ฆผ (์ €์žฅ ๊ฐ€๋Šฅํ•œ ์ฝ”์Šค ์ •๋ณด)
       โ†“
    flatMap โ†’ API ์š”์ฒญ (requestMultiple / Single.zip)
       โ†“
    ๊ฒฐ๊ณผ(Result<Success, Error>) Observable๋กœ ๋ฐ˜ํ™˜
       โ†“
    MainScheduler (UI ์Šค๋ ˆ๋“œ)
       โ†“
    bind โ†’ ์„ฑ๊ณต ์‹œ Realm ์ €์žฅ ๋ฐ UI ํ”ผ๋“œ๋ฐฑ or ์‹คํŒจ ์‹œ UI ํ”ผ๋“œ๋ฐฑ
    
  • ๊ฒฐ๊ณผ

    • ๋ชจ๋“  ์œ„๊ฒฝ๋„ ๊ฐ’์— ๋Œ€ํ•œ ์ฃผ์†Œ ์š”์ฒญ ๊ฒฐ๊ณผ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋ณด์žฅ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฉด์„œ, ์ถœ๋ฐœ์ง€๋ถ€ํ„ฐ ๋„์ฐฉ์ง€๊นŒ์ง€์˜ ์ฃผ์†Œ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์ด ์œ ์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

    • ์ „์ฒด์ ์œผ๋กœ API ์š”์ฒญ ํ๋ฆ„๊ณผ UI ๋ฐ˜์˜ ํ๋ฆ„์ด ๋ช…ํ™•ํ•ด์กŒ๊ณ , ๋น„๋™๊ธฐ ์ˆœ์„œ ์˜ค๋ฅ˜๋ฅผ ํšจ์œจ์ ์ธ Rx ํŒจํ„ด ์กฐํ•ฉ์œผ๋กœ ์•ˆ์ •ํ™”ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

ย 

โœ“ Credits/Thanks

๐Ÿ™๐Ÿป Thanks to Unsplash API

  • ์ด ์•ฑ์€ Unsplash Image API ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฐ”์ดํฌ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

About

๐Ÿ๏ธ ๋ฐ”์ดํฌ ๋ผ์ด๋”๋“ค์„ ์œ„ํ•œ ์ฝ”์Šค ๊ด€๋ฆฌ ์•ฑ

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages