๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
iOS ๐ŸŽ/iOS

RxSwift

by yongmin.Lee 2021. 5. 18.

Example

์ผ๋ฐ˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ex) ๋ฒ„ํŠผํด๋ฆญ์‹œ onLoad() ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์–ด downloadJson()์œผ๋กœ json ๋ฐ์ดํ„ฐ ๋‹ค์šด๋ฐ›๊ณ  ํ™”๋ฉด์— ์ถœ๋ ฅ

์œ„์˜ ๊ณผ์ •์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด return์„ ํ™œ์šฉํ•˜์—ฌ ๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ์Œ 

์ด๋ ‡๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ๋ฐ”๋กœ Rxswift (์ด์™ธ์—๋„ PromiseKit, Bolt, combine๋“ฑ๋“ฑ ๋‹ค์–‘)

๊ฐ€์งœ Rxswitf (์ด๋ฆ„๋งŒ ๋น„์Šทํ•˜๊ฒŒ ์ง์ ‘๋งŒ๋“ฌ)

-> Rxswitf๋Š” ๋น„๋™๊ธฐ๋กœ ์ƒ๊ธฐ๋Š” ๊ฒฐ๊ณผ๊ฐ’์„ completion์œผ๋กœ ์ „๋‹ฌํ•˜๋Š”๊ฒƒ์ด ์•„๋‹ˆ๋ผ return์œผ๋กœ ์ „๋‹ฌํ•จ์œผ๋กœ์จ, ์ฝ”๋“œ๋Š” ๋™๊ธฐ์‹์œผ๋กœ ๋ณด์ด์ง€๋งŒ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋‚˜์ค‘์— ์ˆ˜ํ–‰์„ ๋งˆ์น˜๊ณ  ์™„๋ฃŒ๋œ ๊ฐ’์„ ๋ณ€์ˆ˜์— ํ• ๋‹นํ• ์ˆ˜ ์žˆ๋‹ค!

create๋œ observable์€ subscribeํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์–ด์•ผ ์‹คํ–‰๋œ๋‹ค ์ดํ›„ onNext, onError, onComplete์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌ๋˜๊ณ  disposed ๋œ๋‹ค

RxSwift ์ด์ „์˜ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

  • Apple์€ ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ๋งŽ์€ API๋ฅผ ์ œ๊ณต.
    • NotificationCenter
       : ์‚ฌ์šฉ์ž๊ฐ€ ์žฅ์น˜์˜ ๋ฐฉํ–ฅ์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ํ‚ค๋ณด๋“œ๊ฐ€ ๋“ฑ์žฅํ•˜๊ณ  ์‚ฌ๋ผ์ง€๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • Delegate Pattern
       : ์ž„์˜์˜ ์‹œ๊ฐ„์— ๋‹ค๋ฅธ ํด๋ž˜์Šค ๋‚˜ API์— ์˜ํ•ด ์‹คํ–‰๋  ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Application Delegate์—์„œ ์ƒˆ ์•Œ๋ฆผ์ด ๋„์ฐฉํ•  ๋•Œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ์ž‘์—…์„ ์ •์˜ํ•˜์ง€๋งŒ ์ด ์ฝ”๋“œ๊ฐ€ ์–ธ์ œ ์‹คํ–‰๋˜๋Š”์ง€ ๋˜๋Š” ์‹คํ–‰๋  ์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
    • Grand Central Dispatch (GCD)
       : ์ž‘ํ’ˆ์˜ ์‹คํ–‰์„ ์ถ”์ƒํ™”ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค€๋‹ค. Serial Queue์—์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์˜ˆ์•ฝํ•˜๊ฑฐ๋‚˜ ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ Queue์—์„œ ๋™์‹œ์— ๋งŽ์€ ์ˆ˜์˜ ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Closure
       : ํด๋ž˜์Šค๊ฐ„์— ์ „๋‹ฌํ•  ์ˆ˜์žˆ๋Š” ๋ถ„๋ฆฌ ๋œ ์ฝ”๋“œ. ๊ฐ ํด๋ž˜์Šค๊ฐ€ ์‹คํ–‰ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์‹คํ–‰ํ• ์ง€ ๊ฒฐ์ •
  • ํ•˜์ง€๋งŒ API๋ฅผ ํ†ตํ•œ ๋ณตํ•ฉ์ ์ธ ๋น„๋™๊ธฐ ์ฝ”๋“œ๋Š” ์ฝ”๋“œ ์ „์ฒด๊ฐ€ ์–ด๋–ค ์ˆœ์„œ๋กœ ์‹คํ–‰๋˜๋Š”์ง€ ํŒŒ์•…ํ•˜๋Š”๊ฒƒ์ด ์–ด๋ ต๋‹ค.

 

RxSwift

  • RxSwift is a library for composing asynchronous and event-based code by using observable sequences and functional style operators, allowing for parameterized execution via schedulers. 
  • RxSwift in its essence simplifies developing asynchronous programs by allowing code to react to new data and process it in a sequential and isolated manner.
  • RxSwift๋Š” ์ฝ”๋“œ๋ฅผ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ์— ๋ฐ˜์‘ํ•˜๋ฉฐ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ํ•จ์œผ๋กœ์จ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์‰ฝ๊ฒŒํ•˜๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

RxSwift ๊ตฌ์„ฑ์š”์†Œ

      1. Observable
        • ReactiveX์—์„œ Observer๋Š” Observable์„ subscriptionํ•˜์—ฌ, Observable์ด ๋ฐฐ์ถœํ•˜๋Š” ํ•˜๋‚˜ ๋˜๋Š” ์—ฐ์†๋œ ํ•ญ๋ชฉ์— ๋ฐ˜์‘
        • ReactiveX์—์„œ Observable ๊ฐ์ฒด๋Š” 3๊ฐ€์ง€ ์ด๋ฒคํŠธ๋ฅผ ๋ฐฐ์ถœ 
          • next : ์ตœ์‹ (๋‹ค์Œ)๊ฐ’์„ ์ „์†กํ•˜๋Š” ์ด๋ฒคํŠธ
          • error : Observable์ด ๊ฐ’์„ ๋ฐฐ์ถœํ•˜๋‹ค ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด error๋ฅผ ๋ฐฐ์ถœํ•˜๊ณ  ์ข…๋ฃŒ์‹œํ‚ค๋Š” ์ด๋ฒคํŠธ
          • complete : ์„ฑ๊ณต์ ์œผ๋กœ ์ด๋ฒคํŠธ ์‹œํ€€์Šค๋ฅผ ์ข…๋ฃŒ์‹œํ‚ค๋Š” ์ด๋ฒคํŠธ. Observable์ด ๋” ์ด์ƒ ๊ฐ’์„ ๋ฐฐ์ถœํ•˜์ง€ ์•Š์Œ
      2. Subjects
        • subject๋Š” Observer๋‚˜ Observable์ฒ˜๋Ÿผ ํ–‰๋™ํ•˜๋Š” ReactiveX์˜ ์ผ๋ถ€ ๊ตฌํ˜„์ฒด์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ผ์ข…์˜ bridge
        • subject๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ Observable์„ ๊ตฌ๋…ํ•  ์ˆ˜ ์žˆ๋Š” Observer์ด๋ฉด์„œ ๋™์‹œ์— Observable์ด๊ธฐ๋„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—,ํ•ญ๋ชฉ๋“ค์„ ํ•˜๋‚˜ ํ•˜๋‚˜ ๊ฑฐ์น˜๋ฉด์„œ ์žฌ๋ฐฐ์ถœํ•˜๊ณ  ๊ด€์ฐฐํ•˜๋ฉฐ ์ƒˆ๋กœ์šด ํ•ญ๋ชฉ๋“ค์„ ๋ฐฐ์ถœํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
      3. Operators
        • Operator๋ฅผ ์‚ฌ์šฉํ•ด Observable์— ์˜ํ•ด ๋ฐฉ์ถœ๋˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ณ€ํ™˜ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜์—ฌ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
        • Operator๋Š” ํฌ๊ฒŒ ์•„๋ž˜์˜ ์„ธ ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋‰œ๋‹ค
          • Filtering Operators : .next์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด ๋ฐ›์•„์˜ค๋Š” ๊ฐ’์„ ์„ ํƒ์ ์œผ๋กœ ์ทจํ•  ์ˆ˜ ์žˆ๋‹ค.
          • Transforming Operators : Observable์„ ๋ณ€ํ˜•ํ•˜๋Š” Operator
          • Combining Operators : Sequence๋“ค์„ ๋ชจ์œผ๊ณ , ๊ฐ Sequence ๋‚ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ‘ํ•ฉํ•˜๋Š” Operator
      4. Schedulers
        • Observable ์—ฐ์‚ฐ์ž ์ฒด์ธ์— ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์„ ์ ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ํŠน์ • ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์—ฐ์‚ฐ์ž(๋˜๋Š” ํŠน์ • Observable)๋ฅผ ์‹คํ–‰
        • Rx์—์„œ Scheduler๋Š” Dispatch Queue์™€ ๊ฐ™๋‹ค.