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

[RxSwift ] 1. Observable์ด๋ž€

by Jouureee 2021. 11. 15.

RxSwift์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๋ ค๊ณ  ๋ณด๋‹ˆ ์ˆจ์ด ํ„ฑํ„ฑ ๋ง‰ํžˆ๋Š” ๊ฑฐ ๊ฐ™์•„์„œ 

๊ฐœ๋…์„ ํ์–ด ๋ณด๋Š”๊ฑฐ ๋ง๊ณ  ๋‚ด ๋‚˜๋ฆ„๋Œ€๋กœ ์ •๋ฆฌํ•ด์•ผ๊ฒ ๋‹ค๋Š” ํ•„์š”์„ฑ์„ ๋Š๊ผˆ๋‹ค ..! 

 

๊ทธ๋ž˜์„œ ์˜ค๋Š˜๋ถ€ํ„ฐ TIL ์‹์œผ๋กœ ํ•˜๋‚˜ ํ•˜๋‚˜์”ฉ ๋ฝ€๊ฐœ๋ณด๋ ค๊ณ  ํ•œ๋‹ค ์ฐจ์ฐจ ๊ตต์€ ๋ผˆ๋Œ€๋ถ€ํ„ฐ ์žก๊ณ  ์„ธ์„ธํ•˜๊ฒŒ ๋งˆ์Šคํ„ฐ ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ๋‹ค

RxSwift(์•Œ์Šค)์•ผ ์นœํ•ด์ง€์ž์•„ ๐Ÿฐ๐Ÿต๐Ÿฆ„

 

๊ทธ๋ž˜์„œ ์˜ค๋Š˜์€ ์ฒซ๋ฒˆ์งธ๋กœ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฐœ๋… Observable์— ๋Œ€ํ•ด ์‚ดํŽด๋ณผ๊ฒƒ์ด๋‹ค 

์กฐ๊ธˆ์”ฉ ๋” ์•Œ๊ฒŒ ๋˜๋ฉด์€ ์ถ”๊ฐ€ํ•  ์˜ˆ์ •์ด๋‹ค 

 

์ฐธ๊ณ ํ•œ ๊ธ€์€ ๊ณต์‹ docs๋ฅผ ์ฐธ๊ณ ํ•˜์˜€๋‹ค

http://reactivex.io/documentation/observable.html

 

ReactiveX - Observable

Observable In ReactiveX an observer subscribes to an Observable. Then that observer reacts to whatever item or sequence of items the Observable emits. This pattern facilitates concurrent operations because it does not need to block while waiting for the Ob

reactivex.io

 

"๊ด€์ฐฐ ๊ฐ€๋Šฅํ•œ"

์ด๊ฒƒ์ด ๊ณง observable์„ ํ•ด์„ํ•œ ๊ทธ๋Œ€๋กœ๋‹ค 

rxSwift์˜ ํ† ๋Œ€์— ๋Œ€ํ•ด ์กฐ๊ธˆ ์‚ดํŽด๋ณด์ž๋ฉด ์„ธ์ƒ์€ ๊ด€์ฐฐ๊ณผ ๊ด€์ฐฐ๋˜๋Š” ๋Œ€์ƒ์œผ๋กœ ๊ตฌ๋ถ„ํ• ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์šฐ๋ฆฌ๊ฐ€ ์•ฑ์—์„œ ์ด๋ฒคํŠธ๋“ค์„ ์‚ดํŽด๋ณผ๋•Œ 

์šฐ๋ฆฌ๋Š” ์•Œ๋žŒ์„ ๋“ฑ๋ก(๊ตฌ๋…)ํ•˜๊ณ  ๋“ฑ๋ก๋œ ์•Œ๋žŒ์€ ์•Œ๋žŒ ์‹ ํ˜ธ๋ฅผ ๋ฐฉ์ถœํ•˜๋Š” ๊ด€๊ณ„๋ฅผ ํ˜•์„ฑํ•œ๋‹ค. ์ด์ฒ˜๋Ÿผ ๊ตฌ๋…ํ•˜๋Š” ๋Œ€์ƒ์„ Observer, ๊ตฌ๋…๋ฐ›๋Š” ์ฆ‰, ์ด๋ฒคํŠธ๋ฅผ ๋ฐฉ์ถœํ•˜๋Š” ๋Œ€์ƒ๋ฅผ Observable์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

Observable๋“ค์€ ์ผ๋ จ์˜ sequence๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  

์š”๋Ÿฐ ์‹์œผ๋กœ flip์ด๋ผ๋Š” ๋ณ€ํ™˜์„ ๊ฑฐ์ณ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์•„์ดํ…œ์„ ๋ฐฉ์ถœํ•œ๋‹ค. 

 

 

Observable์˜ ํ–‰๋™ ๊ทœ์น™

Observable๋Š” 3๊ฐ€์ง€ ํ–‰๋™ ๊ทœ์น™์„ ๊ฐ€์ง„๋‹ค โžก๏ธ <next, error, complete>

 

1) onNext 

Observable์ด item์„ ๋ฐฉ์ถœํ• ๋•Œ ์ด๊ณณ์—์„œ ํ˜ธ์ถœํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Observable๋Š” ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์ด์ง€ ๋ฐฉ์ถœํ•˜๊ธฐ ์œ„ํ•ด์„  subScribe๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ ์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•œ๋‹ค. 

์ด๊ณณ onNext์—์„  ๋ฐฉ์ถœ๋˜๋Š” ๊ฐ’์„ model์— ๋Œ€์ž…ํ•˜๊ฑฐ๋‚˜ print ํ•˜๋Š” ๋“ฑ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณณ์ด๋‹ค.

 

2) onError

Observable์ด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์—๋Ÿฌ๋ฅผ ๋งˆ์ฃผํ–ˆ์„๋•Œ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ณณ์ด๋‹ค. error handling ๊ฐ™์€๊ฑด๊ฐ€ ?

 

3) onCompleted

Observable์ด ํ• ์ผ์„ ๋‹ค ๋๋‚ด๊ณ  (onNext์—์„œ์˜ ์ž‘์—…์„ ๋‹ค ์ˆ˜ํ–‰ํ•˜๊ณ ) ์˜ค๋Š” ๊ณณ์ด๋‹ค. 

 

4) onDisposeBag

Observable์ด ํ• ์ผ์„ ๋‹ค ํ–ˆ์„๋•Œ ๊ฐ์ฒด ๊ฐ’์„ ๋ฒ„๋ ค์ฃผ๋Š” ๊ณณ์ด๋‹ค. ๋” ์‚ฌ์šฉํ•  ์ผ์ด ์—†์œผ๋ฏ€๋กœ DisposeBag() ์— ๋‹ด์•„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

 

Observable์˜ ์ƒ์„ฑ

 

1) Observable.just() 

 -> ์ €์ŠคํŠธ ํ•œ๊ฐœ์˜ ์•„์ดํ…œ

2) Observable.of() 

-> ์•„์ดํ…œ์˜ ํƒ€์ž…์„  ์ถ”๋ก ํ•˜์—ฌ "Sequence"๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

3) Observable.from()

-> Array ํƒ€์ž…๋งŒ ๋ฐ›๋Š”๋‹ค

4) Observable.create()

-> Disposable์„ ๋ฆฌํ„ดํ•˜๋ฉฐ ๋‹ค์–‘ํ•œ ๊ฐ’ (onNext, onCompleted, ...) ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๋Œ“๊ธ€