๊ธ€ ์ž‘์„ฑ์ž: ๊ฐœ๋ฐœํ•˜๋Š” ํ›ˆ์ด

2022.01.21 ์˜ค๋Š˜์˜ ๋ฐฐ์›€

์˜ค๋Š˜ ํ•œ ์ผ.

  • ๋ฉด์ ‘ ์ค€๋น„ - Rx ๋œฏ์–ด๋ณด๊ธฐ
  • ์•Œ์—‘์Šค์˜ ํ•ต์‹ฌ์ ์ธ ๋ถ€๋ถ„๋งŒ์„ ๊ณจ๋ผ์„œ ๊ธฐ์กด ๊ณต์‹ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ ๋”ฐ๋ผ ๋งŒ๋“ค์–ด๋ดค๋‹ค. ์ด์ œ์„œ์•ผ subscribe๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€, create๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๊ฒŒ ๋๋‹ค.
  • ๋ ˆํฌ๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด๋‘์—ˆ๋‹ค!
 

GitHub - jeonyeohun/Understanding-RxSwift-internals: ์ฝ๋‹ค๋ณด๋ฉด ์ดํ•ด๊ฐ€ ๋˜๋Š” ์•Œ์—‘์Šค ๐Ÿ‘€

์ฝ๋‹ค๋ณด๋ฉด ์ดํ•ด๊ฐ€ ๋˜๋Š” ์•Œ์—‘์Šค ๐Ÿ‘€. Contribute to jeonyeohun/Understanding-RxSwift-internals development by creating an account on GitHub.

github.com

  • ๋ฉ”์ดํŠธ๋Ÿฌ๋„ˆ์™€ ๋น„๋ฒ„์Šค์˜ 3์‹œ๊ฐ„์— ๊ฑธ์นœ ํž๋ง์Šคํฌ๋Ÿผ์œผ๋กœ ํ•˜๋ฃจ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ–ˆ๋‹ค.

 

์˜ค๋Š˜ ์ƒˆ๋กœ ๋ฐœ๊ฒฌํ•œ ๊ฒƒ.

  • ์‚ฌ์‹ค ์šฐ๋ฆฌ๊ฐ€ subscribe๋ฅผ ํ•˜๊ณ  ๋ฐ›๋Š” disposable์˜ ๊ตฌ์ฒดํƒ€์ž…์€ SinkDisposer์˜€๋‹ค. ์ด ์•ˆ์— ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•˜๋Š” sink์™€ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” subscription์ด disposable๋กœ ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค.
  • dispose๋ฅผ ํ•˜๋ฉด sink์™€ subscription์— ๋Œ€ํ•ด ๋ชจ๋‘ dispose๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  • ์šฐ๋ฆฌ๊ฐ€ Observable์— ๋Œ€ํ•ด subscribe๋ฅผ ๋ถ€๋ฅด๋ฉด ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ๋Š” Producer ํด๋ž˜์Šค์— ์žˆ๋Š” subscribe์ด๊ณ , ์ด ์•ˆ์—์„œ ํ˜ธ์ถœํ•˜๋Š” run ๋ฉ”์„œ๋“œ๋Š” Observable ๊ตฌ์ฒดํƒ€์ž…์— ๊ตฌํ˜„๋˜์–ด์žˆ๋‹ค.
  • ObservableType์— ๊ตฌํ˜„๋œ subscribe๋Š” ๋ฐ˜ํ™˜ํ•  disposable์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด disposable.create๋ฅผ ํ•  ๋•Œ self.asObservable().subscribe(observer)๋ฅผ ๋ถ€๋ฅธ๋‹ค. ์ด๋•Œ observer๋Š” ์ธ์ž๋กœ ์ „๋‹ฌ๋ฐ›์€ ํด๋กœ์ €๋“ค์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์„œ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์˜ต์ €๋ฒ„์ด๊ณ , ์ด ์˜ต์ €๋ฒ„๊ฐ€ AnonymousObservable์„ ๊ตฌ๋…ํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ์ด๋Ÿฌ๋ฉด์„œ ๋‚ด๋ถ€์ ์œผ๋กœ subscribe๊ฐ€ ํ•œ ๋ฒˆ ๋” ๋ถˆ๋ฆฌ๋ฉด ๋‹ค์‹œ producer์˜ subscribe๊ฐ€ ๋ถˆ๋ฆฌ๊ณ , ์ด๋•Œ ์ „๋‹ฌ๋˜๋Š” Observer๋Š” ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์˜ต์ €๋ฒ„, subsribeHandler๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” Observable์€ create๋ฅผ ํ•  ๋•Œ ๋งŒ๋“  Observable์ด ๋˜์–ด์„œ create์— ์ •์˜ํ–ˆ๋˜ ํด๋กœ์ €๊ฐ€ ์‹คํ–‰๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ธ์ž๋กœ ์˜ต์ €๋ฒ„๊ฐ€ ๋“ค์–ด๊ฐ€๋‹ˆ๊นŒ Sink๋ฅผ ํ†ตํ•ด์„œ create์—์„œ ์‹คํ–‰ํ•˜๋Š” ์ด๋ฒคํŠธ๋“ค์ด on์„ ํ†ตํ•ด ์˜ต์ €๋ฒ„์—๊ฒŒ ์ „๋‹ฌ๋œ๋‹ค. ์œ ๋ ˆ์นด!
  • ์‚ฌ์‹ค ObservableType ํ”„๋กœํ† ์ฝœ์—๋Š” on ๋ฉ”์„œ๋“œ๋ฐ–์— ์—†๋Š”๋ฐ, onNext, onError, onCompleted ์ด๋Ÿฐ ์• ๋“ค์€ extension์— ๊ตฌํ˜„๋œ ์Šˆ๊ฐ€ API์ด๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” on(.next(value)) ์ด๋Ÿฐ์‹์œผ๋กœ ๋˜์–ด์žˆ๋‹ค.
  • AnonymousObserver ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” on ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ  ์žˆ์–ด์„œ, ์ž์‹ ์˜ ์ƒ์œ„ ํƒ€์ž…์ธ ObserverBase์˜ on์„ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทผ๋ฐ ๋˜ ObserverBase์˜ on์—์„œ ์—ฐ์‡„์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๋Š” onCore ๋ฉ”์„œ๋“œ๋Š” AnonymousObserver์—์„œ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค.
  • disposable์€ ์‚ฌ์‹ค disposable <- Cancelable <- SinkDisposer ๋กœ ์ƒ์†๋˜๊ณ  ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ตœ์ข…์ ์œผ๋กœ ๋ฐ›๋Š” ํƒ€์ž…์ด Disposable์ธ๊ฒƒ.
  • Cancelable์€ isDisposed ํ”„๋กœํผํ‹ฐ๋ฅผ ์ •์˜ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‹ค.
  • Disposable์€ dispose ํ”„๋กœํผํ‹ฐ๋ฅผ ์ •์˜ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‹ค.
  • Disposables๋Š” ๊ทธ๋ƒฅ ๊ตฌ์กฐ์ฒด๋‹ค. ๋‚ด๋ถ€์— ๊ตฌํ˜„์€ ์—†๊ณ  Disposable์„ Extension์œผ๋กœ ๋นผ์„œ ๋‚ด๋ถ€์— create ํƒ€์ž… ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋กœ๋”ฉ์œผ๋กœ ์—ฌ๋Ÿฌ๊ฐœ ๋งŒ๋“ ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋Š” ์ด์œ ๋Š” create๋กœ ๋งŒ๋“œ๋Š” Disposable์˜ ๊ตฌ์ฒดํƒ€์ž…์˜ ํŒŒ์ผ ์•ˆ์— Disposable.create๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ๋”ํ•˜๊ธฐ ์œ„ํ•จ์ธ ๊ฒƒ ๊ฐ™๋‹ค. ํ™•์‹คํžˆ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ฝ๊ธฐ์— ์ข‹์€ ํŒŒ์ผ์ด ๋œ๋‹ค.

์˜ค๋Š˜ ๋Š๋‚€ ๊ฒƒ.

  • ๋ถ€์บ ์—์„œ ์ •๋ง ์ข‹์€ ์‚ฌ๋žŒ๋“ค์€ ๋งŒ๋‚œ ๊ฒƒ ๊ฐ™์•„์„œ ๊ธฐ์˜๋‹ค! ์‹œ์‹œ์ฝœ์ฝœํ•œ ์ด์•ผ๊ธฐ๋ฅผ ํ†ตํ•ด์„œ ์ง„์งœ ๋งŽ์ด ํž๋ง๋ฐ›๋Š”๋‹ค.
  • ์•Œ์—‘์Šค๋ฅผ ์ฒ˜์Œ ๋œฏ์–ด๋ณผ ๋•Œ๋Š” ์ง„์งœ ๋ง‰๋ง‰ํ–ˆ๋Š”๋ฐ, ์ž‘์€ ๋‹จ์œ„๋กœ ์•„์ฃผ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ๋“ค๋งŒ ๋ถ„์„ํ•ด๋ณด๋‹ˆ ์—„์ฒญ๋‚˜๊ฒŒ ์–ด๋ ต์ง€๋Š” ์•Š์•˜๋‹ค. ์˜จ์ข…์ผ์„ ๋‹ค ์“ฐ๊ธด ํ–ˆ์ง€๋งŒ.. ์—ญ์‹œ ์ธ์ƒ์˜ ์ง„๋ฆฌ๋Š” ๋ถ„ํ• ์ •๋ณต์ด๋ผ๋Š” ๊ฒƒ์„ ๋‹ค์‹œํ•œ๋ฒˆ ๊นจ๋‹ซ๋Š”๋‹ค.
  • ๋‚ด์ผ ๋‚ด ์—ฐ๊ตฌํŒŒํŠธ๋„ˆ๊ฐ€ ๊ฒฐํ˜ผ์„ ํ•œ๋‹ค. ๋ถ€๋Ÿฝ๊ธฐ๋„ ํ•˜๊ณ  ์ผ๋…„ ์ „์— ๊ฐ™์ด ์—ฐ๊ตฌ์‹ค์—์„œ ์›ƒ๊ณ  ๋– ๋“ค๋˜ ์นœ๊ตฌ๊ฐ€ ์ง€๊ธˆ์€ ๋‚˜๋ž‘ ์™„์ „ ๋‹ค๋ฅธ ์ƒํ™ฉ์— ์žˆ์œผ๋‹ˆ๊นŒ ์‹ ๊ธฐํ•˜๊ธฐ๋„ ํ•˜๋‹ค. ๋‚˜๋„ ์ €๋Ÿฌ ๋‚ ์ด ์˜ค๊ฒ ์ง€?

๋‚ด์ผ์˜ ๊ณ„ํš.

  • ๋ฉด์ ‘ ์ค€๋น„ - ์ด์ œ CS์™€ iOS์ชฝ์„ ๊ณ„์† ๋ด์•ผ๊ฒ ๋‹ค.

์˜ค๋Š˜์˜ ๊ฐ์‚ฌ.

  • ์ผ์ฃผ์ผ์„ ์ข‹์€ ์‚ฌ๋žŒ๋“ค๊ณผ ์ฆ๊ฒ๊ฒŒ ๋งˆ๋ฌด๋ฆฌํ•˜๊ฒŒ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!