๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“Œ Language/Swift

[RxSwift] Observable ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณด๊ธฐ

by Fomagran ๐Ÿ’ป 2020. 12. 29.
728x90
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š” Foma ์ž…๋‹ˆ๋‹ค!

 

์ €๋ฒˆ ์‹œ๊ฐ„์— Reactive X๋Š”

"์˜ต์ €๋ฒ„๋ธ” ํ๋ฆ„์„ ์‚ฌ์šฉํ•˜๋Š” ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•œ API"

๋ผ๊ณ  ์†Œ๊ฐœ๋“œ๋ ธ์Šต๋‹ˆ๋‹ค.

 

์†Œ๊ฐœ์— ๋‚˜์™€ ์žˆ๋‹ค์‹œํ”ผ Observable ์ด๋ผ๋Š” ๊ฐœ๋…์€ ๊ฐ€์žฅ ํ•ต์‹ฌ์ด ๋˜๋Š” ๊ฒƒ์ธ๋ฐ์š”.

 

๊ทธ๋ž˜์„œ ์˜ค๋Š˜์€ Observable์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


Observer Pattern

๋จผ์ € Reactive X๋Š” ์˜ต์ €๋ฒ„ ํŒจํ„ด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

์˜ต์ €๋ฒ„ ํŒจํ„ด์ด๋ž€ Observable์„ Observer๊ฐ€ ๊ตฌ๋…ํ•˜๊ณ  Observable์ด ์–ด๋–ค ์ƒํƒœ๋ฅผ ๋ฐฉ์ถœํ•˜์˜€์„ ๋•Œ

 

Observer์—๊ฒŒ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด์ฃ .

 

์ด๊ฒƒ์€ ์œ ํŠœ๋ฒ„๊ฐ€ ๊ตฌ๋…์ž์—๊ฒŒ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์œผ๋กœ ์ดํ•ดํ•˜์‹œ๋ฉด ํŽธํ• ๊ฑฐ๊ฐ™์•„์š”.

 

Observable์ด ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์€ 3๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

OnNext -> ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„๋•Œ

 

OnError -> ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„๋•Œ

 

OnComplete -> ๋ชจ๋“  ์ด๋ฒคํŠธ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์„๋•Œ

Example

์•„๋ž˜์™€ ๊ฐ™์ด 1,2,3์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฉ์ถœํ•˜๋Š” Observable๊ณผ ๊ทธ๊ฒƒ์„ ๊ตฌ๋…ํ•˜๋Š” Subcriber๋ฅผ ๋งŒ๋“ค์–ด์คฌ์Šต๋‹ˆ๋‹ค.

 

์ด๊ฒƒ์„ ์‹คํ–‰์‹œ์ผœ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐฉ์ถœ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฐจ๋ก€๋Œ€๋กœ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ๋ธ”๋กœ ํ™•์ธํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ทธ๋ฆผ์ž…๋‹ˆ๋‹ค. ์•„์ง Complete๊ฐ€ ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— Observable์ด ๊ณ„์† ํ๋ฅด๊ณ (?) ์žˆ์ฃ .

์—ฌ๊ธฐ์„œ Observable์— onCompleted๋ฅผ ๋ฐฉ์ถœ์‹œ์ผœ ํ๋ฆ„์„ ์™„๋ฃŒ์‹œ์ผœ์ฃผ๋ฉด

์•„๋ž˜์™€ ๊ฐ™์ด completed๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฉ์ถœ์‹œํ‚ค๋Š”๋ฐ ์ค‘๊ฐ„์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

 

์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐ์ดํ„ฐ๋ฅผ 1๊ณผ 2๋ฅผ ๋ฐฉ์ถœ์‹œํ‚ค๊ณ  3์„ ๋ฐฉ์ถœํ•˜๊ธฐ ์ „์— ์—๋Ÿฌ๋ฅผ ๋ฐฉ์ถœ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด 1๊ณผ 2๊ฐ€ ์ถœ๋ ฅ๋˜๊ณ  ๊ทธ ๋’ค๋กœ๋Š” ์—๋Ÿฌ๊ฐ€ ์ถœ๋ ฅ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด๊ฒƒ์€ ์—๋Ÿฌ๊ฐ€ ๋‚œ ๋’ค์—๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐฉ์ถœ๋˜์ง€ ์•Š์œผ๋ฉฐ ์‹ฌ์ง€์–ด Complete๋„ ๋ฐฉ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€