ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

img


๐ŸŽฏ RxSwift ์ดํ•ดํ•˜๊ธฐ_03


RxSwift ์ดํ•ดํ•˜๊ธฐ_01 - https://jayb-log.tistory.com/275

RxSwift ์ดํ•ดํ•˜๊ธฐ_02 - https://jayb-log.tistory.com/276

โ€‹

  • ๐Ÿ™‹ ์ด ๊ธ€์€ RxSwift์— ๋Œ€ํ•œ ์—„์ฒญ๋‚œ ์ดํ•ด๋‚˜ ๋ณธ์งˆ์„ ํŒŒ์•…ํ•œ๋‹ค๊ธฐ๋ณด๋‹ค ์ž…๋ฌธํ•˜๋Š” ์ž…์žฅ์—์„œ ์ž‘์„ฑํ•˜๋Š” ๊ธ€์ด์—์š”! ๊ณฐํŠ€๊น€๋‹˜์˜ ๊ฐ•์˜(ํ•˜๋‹จ์— ๋งํฌ) ๋ฅผ ๋“ค์œผ๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ, ์ƒ๊ฐ๋“ค์„ ์ž‘์„ฑํ•  ์˜ˆ์ •์ด์—์š”. ํ‹€๋ฆฐ ๋ถ€๋ถ„์ด๋‚˜ ์ถ”๊ฐ€ํ•˜๋ฉด ์ข‹์€ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์€ ์–ธ์ œ๋‚˜ ํ™˜์˜์ž…๋‹ˆ๋‹ค :]

๐Ÿง‘๐Ÿปโ€๐Ÿ’ป ๊ทธ๋ฆผ์œผ๋กœ Operators ์ดํ•ดํ•˜๊ธฐ


  • ๊ทธ๋ฆผ ์ดํ•ดํ•˜๊ธฐ

    ์šฐ์„ , ์œ„์˜ ๊ทธ๋ฆผ์„ ํ•ด์„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋งํ•ด๋ณผ๊ฒŒ์š”.

    ๋นจ๊ฐ„์ƒ‰ ๊ตฌ์Šฌ์€ ๋งˆ๋ธ”์ด๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ ์—ฌ๊ธฐ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธํ•ด์š”.

    ๊ทธ ์•„๋ž˜ ํ™”์‚ดํ‘œ๋Š” ์ŠคํŠธ๋ฆผ(Stream)์ด์—์š”. ํ˜น์‹œ ์ŠคํŠธ๋ฆผ์ด ๋ฌด์—‡์ธ์ง€ ๊ถ๊ธˆํ•˜์‹œ๋‹ค๋ฉด 2ํŽธ์„ ๋ณด๊ณ  ์˜ค์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”!

    ๊ทธ ํ™”์‚ดํ‘œ์— ์„ธ๋กœ๋กœ ๊ทธ์–ด์ง„ ์„ ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ทธ ์ง€์ ์—์„œ ๋๋‚œ๋‹ค(completion) ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ด์š”. ๊ทธ๋ ‡๊ฒŒ๋˜๋ฉด dispose bag์—์„œ ์‚ฌ๋ผ์ง€๊ฒŒ๋˜์ฃ !

    ๊ทธ๋Ÿผ ์ด์ œ ํ•˜๋‚˜ํ•˜๋‚˜ Operators๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ์ดํ•ดํ•ด๋ณผ๊ฒŒ์š”!


โš™๏ธ Operators


  • Just


    ๋‹ค์‹œ ๊ฐ™์€ ๊ทธ๋ฆผ์„ ๋ณผ๊ฒŒ์š”. ์œ„์˜ ๊ทธ๋ฆผ์„ ํ•ด์„ํ•˜๋ฉด Just๋Š” ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ๊ทธ๋Œ€๋กœ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘์–ด๋„ฃ์–ด์š”. ๋นจ๊ฐ„ ๊ตฌ์Šฌ์ด ๋“ค์–ด์™€ ๋นจ๊ฐ„ ๊ตฌ์Šฌ์ด ๋‚˜๊ฐ€๋Š” ๊ตฌ์กฐ์—์š”!


  • From


    From์€ Array(Data)๋ฅผ ์ง‘์–ด๋„ฃ์—ˆ์—ˆ์ฃ ! Array๋ฅผ ๋„ฃ์–ด์„œ ํ•˜๋‚˜ ํ•˜๋‚˜์”ฉ Stream์— ์ง‘์–ด๋„ฃ์–ด์ค˜์š”.


  • Map


    ์ด๋ฏธ์ง€๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€์™€๋Š” ์กฐ๊ธˆ ๋‹ค๋ฅด์ฃ ? ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ map์— ์žˆ๋Š” ๋งˆ๋ธ”์€ ์ง์ ‘ ์›€์ง์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ๋˜ ๋‹ค๋ฅธ ์ ์€ ์ด๋ฒˆ์—” ์œ„์—๋„ stream์ด ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์ด์—์š”.

    ์ฆ‰, map์€ Just๋‚˜ From์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์ŠคํŠธ๋ฆผ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ŠคํŠธ๋ฆผ์—์„œ ์ŠคํŠธ๋ฆผ ์‚ฌ์ด์— ์—ฐ๊ฒฐ์ž๋กœ ์—ญํ• ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์–ด์š”.


  • Filter


    filter ์—ญ์‹œ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›Œ์š”. ์ŠคํŠธ๋ฆผ์„ ๋ฐ›์•„์„œ filter๋ฅผ ํ†ตํ•ด 10 ์ดˆ๊ณผ์˜ ๊ฐ’๋งŒ ๋‹ค์Œ stream์œผ๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ๊ตฌ์กฐ์—์š”.


  • First


    ๋ง ๊ทธ๋Œ€๋กœ stream์—์„œ ์ฒซ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋งŒ ๋„˜๊ฒจ์ค˜์š”. complete bar์˜ ์œ„์น˜๊ฐ€ ์ค‘์š”ํ•œ๋ฐ first์˜ ๊ฒฝ์šฐ map๊ณผ filter์™€ ๋‹ค๋ฅด๊ฒŒ first ์ด์ „ stream์˜ complete ์‹œ์ ์€ ์ค‘์š”ํ•˜์ง€ ์•Š์•„์š”. ๊ทธ๊ฒŒ ์–ธ์ œ๊ฐ€ ๋˜์—ˆ๋“  ์ฒซ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ธฐ๋Š” ์‹œ์ ์— ๋ฐ”๋กœ completeํ•ด์š”.


  • Single


    Single์— ๊ด€ํ•ด์„œ๋Š” ๋’ค์— ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ฒ ์ง€๋งŒ, ์šฐ์„  ๊ทธ๋ฆผ์„ ์ดํ•ดํ•˜๋Š” ๊ณณ์—์„œ ๋‚˜์™”์œผ๋‹ˆ ๊ฐ„๋‹จํžˆ ์‚ดํŽด๋ณผ๊ฒŒ์š”!

    Single์€ (๋นจ, ์ดˆ, ํŒŒ)์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•˜์„ ๋•Œ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ์–ด์š”. ๋ฐ˜๋ฉด์— ๋นจ๊ฐ„์ƒ‰ ๋งˆ๋ธ”๋งŒ ๋ฐ›์•˜์„ ๋•Œ์—๋Š” ์ •์ƒ์ ์œผ๋กœ ๋„˜๊ฒจ์ค˜์š”. X ๋งˆํฌ๋Š” ์—๋Ÿฌ๋ฅผ ๋œปํ•ด์š”.

    ๊ทธ๋ฆผ์„ ์ž์„ธํžˆ ๋ณด๋ฉด, single์ด ๋™์ž‘ํ•˜๋Š” ์‹œ์ ์€ ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๋„˜๊ธฐ๊ณ  complete bar ์‹œ์ ์— ๋งˆ๋ธ”์„ ๋„˜๊ฒจ์ค˜์š”. ๋ฐ˜๋ฉด์—, ๊ทธ ๋„˜๊ฒจ์ค˜์•ผ ํ•˜๋Š” ์‹œ์ (์ฒซ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ์ง€๋‚œ ์‹œ์ )์— complete bar๊ฐ€ ์—†๊ณ  ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ(์—ฌ๊ธฐ์„œ๋Š” ์ดˆ๋ก์ƒ‰)์ด ์žˆ๋‹ค๋ฉด ๊ทธ ์‹œ์ ์— ์—๋Ÿฌ๋ฅผ ์ผ์œผํ‚ค๋Š” ๊ฑฐ์—์š”.

    ์ฆ‰, Single์€ first์ฒ˜๋Ÿผ ํ•œ๊ฐ€์ง€ ์š”์†Œ๋ฅผ ๋„˜๊ธฐ์ง€๋งŒ first์™€ ๋‹ค๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š” ์ฆ‰์‹œ ๋„˜๊ฒจ์ฃผ๊ณ  complete ํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๊ณ  ๊ทธ ๋‹ค์Œ complete bar๊ฐ€ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์—๋Ÿฌ๊ฐ€ ์ผ์–ด๋‚ ์ง€, stream์— ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ฒจ์ค„ ์ง€๊ฐ€ ๊ฒฐ์ •๋‚˜์š”.


  • Single(์–ด๋–ค ๊ฐ’)


    ์œ„ ์ƒํ™ฉ๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ ์ด๋ฒˆ์—๋Š” Single์— ์–ด๋–ค ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋Š” ๊ตฌ์กฐ์—์š”. ๊ทธ๋ฆผ์—์„œ๋Š” ์ดˆ๋ก์ƒ‰ ๋งˆ๋ธ”์ด๋„ค์š”. ์ด ๊ฒฝ์šฐ๋Š” ๋‹จ์ˆœํ•œ single๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ดˆ๋ก์ƒ‰ ๊ฐ’์ด ์žˆ์œผ๋ฉด ๋„˜๊ฒจ๋ฐ›๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ 2๊ฐœ ์ด์ƒ์ด์—ฌ๋„ complete bar ์‹œ์ ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ฒจ์ค˜์š”. ํ•˜์ง€๋งŒ ์˜ค๋ฅธ์ชฝ ๊ทธ๋ฆผ์˜ ๊ฒฝ์šฐ ์ดˆ๋ก์ƒ‰ ๋งˆ๋ธ”์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์—๋Ÿฌ๋ฅผ ์ผ์œผ์ผœ์š”.


  • FlatMap


    ์ด๊ฑด Map๊ณผ ์กฐ๊ธˆ ๋‹ฌ๋ผ์š”! Map์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์—ˆ์„ ๋•Œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜์™”๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ๋Š” ๊ทธ๋ฆผ์ด ์กฐ๊ธˆ ๋‹ค๋ฅด์ฃ ? ๋™๊ทธ๋ž€ ๋งˆ๋ธ”์„ ๋„ฃ์—ˆ์„ ๋•Œ(๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์—ˆ์„ ๋•Œ) FlatMap์€ ๋‹ค์ด์•„๋ชฌ๋“œ 2๊ฐœ๋ฅผ ๊ฐ€์ง„ stream์„ ๋ฐ˜ํ™˜ํ•ด์š”. ๊ทธ๋ž˜์„œ ์œ„์˜ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ๋นจ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ flatํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์„œ ๋‹ค์ด์•„ 2๊ฐœ๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ณ , ์ดˆ๋ก ๋งˆ๋ธ”์„ ๋„ฃ์–ด 2๊ฐœ์˜ ๋‹ค์ด์•„๋ฅผ ๋งŒ๋“ค๋˜ ์ค‘ ๊ทธ๊ฒŒ ์™„๋ฃŒ๋˜๊ธฐ ์ „์— ํŒŒ๋ž€ ๋งˆ๋ธ”์ด ๋“ค์–ด๊ฐ€์„œ ํŒŒ๋ž€ ๋‹ค์ด์•„๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” ์ˆœ์„œ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚ฌ์–ด์š”.

    ์ด๊ฑธ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์„ ๋•Œ, ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ flat ์ž‘์—…๊ณผ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ flat ์ž‘์—…์ด concurrentํ•˜๊ฒŒ ์ผ์–ด๋‚จ์„ ์•Œ ์ˆ˜ ์žˆ์–ด์š”.


๐Ÿ“š Marble๋กœ RxSwift ์—ฐ์Šตํ•˜๊ธฐ


  • rxmarbles์— ๊ฐ€๋ฉด RxSwift์˜ ๋‹ค์–‘ํ•œ Operators๋ฅผ ์œ„์˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ marble๋กœ ์—ฐ์Šตํ•ด๋ณผ ์ˆ˜ ์žˆ์–ด์š”.


4ํŽธ์—์„œ๋Š” next, error, complete์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

ReactiveX

RxSwift by ๊ณฐํŠ€๊น€

๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๋ฐ˜์‘ํ˜•
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
TAG more
ยซ   2024/11   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
๊ธ€ ๋ณด๊ด€ํ•จ