Search

RxSwift - ReactiveX

ย ReactiveX

ReactiveX(RX)๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
โ“ต ์ผ๋ จ์˜ ๊ฐ’๋“ค์„ ๋ฐœํ–‰ํ•ด๋‚ด๋Š” Observable
โ“ถ ์—ฐ์†์ ์ธ ๊ฐ’๋“ค์ด ํ˜๋Ÿฌ๊ฐ€๋Š” Stream์—์„œ Pipe ์—ญํ• ์„ ํ•˜๋Š” Operator
โ“ท Pipe๋งŒ ์ณ๋‹ค๋ณด๋ฉฐ ๊ฐ’์„ ๊ธฐ๋‹ค๋ฆฌ๋‹ค๊ฐ€ ๋ฌด์–ธ๊ฐ€๊ฐ€ ๋‚˜์˜ค๋ฉด ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋Š” Observer
3๊ฐ€์ง€ ์š”์†Œ๋ฅผ ๋กœ๋ด‡ ๊ณต์žฅ์œผ๋กœ ์„ค๋ช…ํ•ด๋ณผ๊ฒŒ์š”.
Observable์€ ๊ฐ’์„ ์ฐ์–ด๋‚ด์„œ Stream ์œ„์— ์˜ฌ๋ ค์ฃผ๋Š” ๊ธฐ๊ณ„์ž…๋‹ˆ๋‹ค. Observable์€ ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ Stream, โ€œํ๋ฆ„โ€ ์— ํ˜๋ ค๋ณด๋ƒ…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ Stream์„ ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ๋ผ๊ณ  ๋ถ€๋ฅผ๊ฒŒ์š”.
์šฐ๋ฆฌ๋Š” Observable์ด๋ผ๋Š” ๊ธฐ๊ณ„์—์„œ ์ฐ์–ด๋‚ธ ๋ฐ์ดํ„ฐ ๋กœ๋ด‡์„ Stream์ด๋ผ๋Š” ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ์— ์˜ฌ๋ ค์ฃผ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
Observable ๊ธฐ๊ณ„์—์„œ ์ฐ์–ด๋‚ธ ๋ฐ์ดํ„ฐ ๋กœ๋ด‡๋“ค์€ ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ๋ฅผ ํƒ€๊ณ  ์ด๋™ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
์ด๋™ ์ค‘์— filter ๋ผ๋Š” Operator๋ฅผ ๋งŒ๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น Operator๋Š” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ, ๋ฐ์ดํ„ฐ ๋กœ๋ด‡๋“ค์„ ๊ฑธ๋Ÿฌ๋‚ด๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋‚œ filter ๋Š” ์ƒ‰๊น”์„ ๊ฑธ๋Ÿฌ๋‚ด๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
filter ํŒŒ์ดํผ๋กœ ๊ฑธ๋Ÿฌ์ง„ ๋ฐ์ดํ„ฐ ๋กœ๋ด‡์€ map ์ด๋ผ๋Š” Operator๋ฅผ ๋งŒ๋‚ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น Operator ์•ˆ์— ์žˆ๋Š” ํฌ์žฅํ•˜๊ธฐ ๋ฉ”์„œ๋“œ๋กœ ์ธํ•ด์„œ ๋ฐ์ดํ„ฐ ๋กœ๋ด‡์€ ํฌ์žฅ๋ฉ๋‹ˆ๋‹ค.
Observable์— ์˜ํ•ด์„œ ๋งŒ๋“ค์–ด์ง€๊ณ  Operator์— ์˜ํ•ด์„œ ๊ฑธ๋Ÿฌ์ง€๊ณ  ๊พธ๋ฉฐ์ง„ ๋ฐ์ดํ„ฐ ๋กœ๋ด‡์€ ํ•ด๋‹น ๊ณต์žฅ์—์„œ ๋‚˜์˜ค๋Š” ์ œํ’ˆ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” Observer์—๊ฒŒ ๊ฐ‘๋‹ˆ๋‹ค. Observer๋Š” ์ž์‹ ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ€๋ฐฉ์— ํ•ด๋‹น ์ œํ’ˆ์„ ๋ฐ›๊ธธ ์›ํ•ฉ๋‹ˆ๋‹ค.
Rx๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์˜ ํ๋ฆ„์œผ๋กœ ํ˜๋ ค๋ณด๋‚ด๋ฉด์„œ ์ค‘๊ฐ„ ์ค‘๊ฐ„ Operator๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊พธ๋ฉฐ์ฃผ๊ฑฐ๋‚˜ ๊ฑธ๋Ÿฌ๋‚ด๊ธฐ๋„ ํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๊ธธ ์›ํ•˜๋Š” ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ด์ค๋‹ˆ๋‹ค.
๊ทผ๋ฐ, Operator๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ๊ธฐ๋ณธ์ ์ธ ์ปดํ“จํ„ฐ ์–ธ์–ด์—์„œ ์ œ๊ณตํ•ด์ค๋‹ˆ๋‹ค. Rx๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋”๋ผ๋„ map, filter ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ’์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด, Rx๋Š” ๋ฌด์Šจ ์ด์ ์ด ์žˆ๋Š”๊ฑด๊ฐ€์š”?
1์ฐจ์›์ ์ธ ๊ฐ’๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‹œ๊ฐ„์˜ ํ๋ฆ„, ์‚ฌ์šฉ์ž์˜ ๋™์ž‘, ๋„คํŠธ์›Œํฌ ์š”์ฒญ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ „๋ถ€ Stream์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Integer, String๋“ฑ์˜ ํƒ€์ž…๋ง๊ณ ๋„ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ํƒญํ•œ ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž๊ฐ€ ์Šคํฌ๋กค์„ ํ–ˆ์„ ๋•Œ๊ฐ™์€ ์‚ฌ์šฉ์ž์˜ ๋™์ž‘๋„ Stream์— ๋‹ด์•„์„œ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, Operator๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ทธ ๊ฐ’์„ ๊ฐ€๊ณตํ•  ์ˆ˜๋„ ์žˆ๋Š”๊ฑฐ์ฃ .
Stream์„ ํ†ตํ•ด์„œ ๋‚˜์˜ค๋Š” ๊ฐ’์€ ํ•ด๋‹น Observable๋ฅผ ๊ตฌ๋…ํ•˜๊ณ  ์žˆ๋Š” Observer๊ฐ€ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์œ„์—์„œ Stream์„ ํ†ตํ•ด์„œ โ€œ๊ฐ’์ด ๋‚˜์˜ค๋ฉด ํ•ด๋‹น ๊ฐ’์„ ๊ฐ€๋ฐฉ์— ๋„ฃ์–ด๋ผโ€ ์ฒ˜๋Ÿผ ์ž์‹ ์˜ ์ƒํ™ฉ์— ๋งž๊ฒŒ๋” ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
Rx๊ฐ™์ด ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„๊ณผ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ์ „ํŒŒ์— ์ค‘์ ์„ ๋‘” ์„ ์–ธ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

ย ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

Reactive=ChangeDection+Binding+Template+AutoRenderReactive = Change Dection + Binding + Template + Auto Render
๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ, ํ…œํ”Œ๋ฆฟ์— ์„ ์–ธํ•ด๋‘”๋Œ€๋กœ ์•Œ์•„์„œ ํ™”๋ฉด์ด ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค.
์ด์ „์—๋Š” ๋ Œ๋”๋ง ์‹œ์ ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๋ถˆ๋Ÿฌ์™€์„œ ํ™”๋ฉด์— ์ถœ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฏธ๋ฆฌ ์„ ์–ธ๋˜์–ด ์žˆ๋Š” ๊ตฌ์กฐ์—์„œ ๊ฐ’์ด ๋ณ€ํ™”ํ•˜๋ฉด ํ…œํ”Œ๋ฆฟ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
์ฆ‰, ์ด์ „์—๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ํ™”๋ฉด์„ ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด, ํ˜„์žฌ๋Š” ๋ฌด์—‡์„ ํ•  ์ง€ ์„ ์–ธํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์ „ํŒŒํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ž˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ž˜ํ•˜๋Š” ๊ฒƒ์€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ํ™”๋ฉด์ด ์‚ฌ์šฉ์ž์˜ ์˜๋„๋กœ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•  ์ง€ ์˜ˆ์ธก ๋ถˆ๊ฐ€ํ•˜๊ณ , ์„œ๋ฒ„์˜ ์‘๋‹ต์ด ์–ธ์ œ ์–ด๋–ป๊ฒŒ ์˜ฌ ์ง€ ์˜ˆ์ธก ๋ถˆ๊ฐ€ํ•œ ์ƒํ™ฉ์—์„œ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ž˜ ๋‹ค๋ฃฐ ์ค„ ์•ˆ๋‹ค๋ฉด ์˜ˆ์ธก ๋ถˆ๊ฐ€ํ•œ ์ƒํ™ฉ์„ ์ž˜ ํ—ค์ณ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ, ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๊ฒŒ ๋˜๋ฉด ์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ธ์ œ ์‹คํ–‰๋  ์ง€ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๊ณ , ํ˜ธ์ถœํ•œ ์ˆœ์„œ๋กœ ๋™์ž‘ํ•œ๋‹ค๋Š” ๋ณด์žฅ๋„ ์—†์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ํ˜ธ์ถœ ๋‹น์‹œ ๊ฐ’, ์‹ค์ œ ์‹คํ–‰๋˜์—ˆ์„ ๋•Œ ๊ฐ’์ด ๊ทธ๋Œ€๋กœ๋ผ๊ณ  ๋ณด์žฅํ•  ์ˆ˜๋„ ์—†์Šต๋‹ˆ๋‹ค.
์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋ณตํ•ฉ์ ์œผ๋กœ ์กด์žฌํ•œ๋‹ค๋ฉด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ๋” ํž˜๋“ค์–ด์งˆ๊ฒ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ, ์‚ฌ์šฉ์ž๊ฐ€ ์นด์นด์˜ค ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €๋‹ค๊ณ  ํ•ด๋ด…์‹œ๋‹ค. ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์นด์นด์˜ค ์„œ๋ฒ„์— ํ•ด๋‹น ์‚ฌ์šฉ์ž๊ฐ€ ์œ ํšจํ•œ ์‚ฌ์šฉ์ž์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ž์ฒด ์„œ๋ฒ„์—์„œ ํ•œ ๋ฒˆ ๋” ํ•ด๋‹น ์‚ฌ์šฉ์ž๊ฐ€ ์œ ํšจํ•œ ์‚ฌ์šฉ์ž์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋‘ ์„œ๋ฒ„ ๋ชจ๋‘์—์„œ OK์ธ ์ƒํ™ฉ์ด๋ผ๋ฉด ๋กœ๊ทธ์ธ์„ ์‹œ์ผœ์ฃผ๋Š” ๋กœ์ง์„ ์ง ๋‹ค๊ณ  ํ•ด๋ด…์‹œ๋‹ค.
๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ์นด์นด์˜ค ์„œ๋ฒ„์™€ ์ž์ฒด ์„œ๋ฒ„ ๋ชจ๋‘์— ๋น„๋™๊ธฐ์ ์œผ๋กœ ์œ ํšจํ•œ ์‚ฌ์šฉ์ž์ธ์ง€ ํ™•์ธ์„ ํ•˜๊ณ , ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ’์ด OK์ธ์ง€ ํ™•์ธํ•ด์„œ ๋กœ๊ทธ์ธ ์™„๋ฃŒ ์ฒ˜๋ฆฌํ•œ ํ›„์— ์•ฑ์— ์ž…์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ํ•˜๋Š” ๋กœ์ง, ์ƒ๊ฐ๋งŒ ํ•ด๋„ ๋ณต์žกํ•˜์ง€ ์•Š๋‚˜์š”?
์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ์˜ ๊ด€์ ์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•œ๋‹ค๋ฉด ์–ด๋ ค์›€์ด ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋ฐ์ดํ„ฐ ํ๋ฆ„๊ณผ ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ „ํŒŒ์— ์ค‘์ ์„ ๋‘” ์„ ์–ธ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์„ Stream์œผ๋กœ ๊ฐ„์ฃผํ•˜๊ณ  ์„ ์–ธ์ ์œผ๋กœ ๊ฐœ๋ฐœ์„ ํ•˜๋Š”๊ฑฐ์ฃ .
๋น„๋™๊ธฐ๋ฅผ ์กฐ๊ธˆ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋ฐ”๋ผ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ด€์ ์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
RxSwift๋กœ ์œ„์˜ ์ƒํ™ฉ์„ ์ž‘์„ฑํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, Rx๋Š” ์‚ฌ์šฉ์ž์˜ ๋™์ž‘๋งˆ์ €๋„ Stream์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ธฐ์— ์‚ฌ์šฉ์ž๊ฐ€ ์นด์นด์˜ค ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €๋‹ค๋Š” ๋™์ž‘์„ Stream์œผ๋กœ ๋ณด๋‚ผ๊ฒ๋‹ˆ๋‹ค.
kakaoLoginButton.rx.tap
Swift
๋ณต์‚ฌ
๊ทธ๋ฆฌ๊ณ , ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๊ฐ€ ์œ ํšจํ•œ์ง€์— ๋Œ€ํ•œ ๊ฐ’์„ ๋ฐ›์•„์„œ, ๋‘˜ ๋‹ค True ๊ฐ’์ด ๋“ค์–ด์˜ค๋Š”์ง€ ํ™•์ธํ•˜๊ฒ ์ฃ .
.filter { kakaoAPI.checkUser() && appAPI.checkUser() }
Swift
๋ณต์‚ฌ
ํ•ด๋‹น ํ•„ํ„ฐ์—์„œ ๊ฑธ๋Ÿฌ์ง€์ง€ ์•Š์•˜๋‹ค๋ฉด ์œ ํšจํ•œ ์‚ฌ์šฉ์ž์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์ธ ํ™”๋ฉด์œผ๋กœ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ์„ ๊ฒ๋‹ˆ๋‹ค.
.subscribe { _ in presentMainScreen() }
Swift
๋ณต์‚ฌ
๋ณด์‹œ๋‹ค์‹œํ”ผ, Rx์˜ ํ๋ฆ„์€ ํ•œ ๋ฐฉํ–ฅ์˜ ํ™”์‚ดํ‘œ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์—, ๋น„๋™๊ธฐ ํ๋ฆ„์„ ๋‹จ์ˆœํ•œ ํ˜•ํƒœ๋กœ ๋ฐ”๋ผ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š”๊ฑฐ์ฃ . ์ดํ•ดํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ, ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๊ฐ€ ์ž‘์„ฑ๋˜์–ด ์žˆ์–ด์„œ ๊ฐ ๋ถ€๋ถ„์ด ์„œ๋กœ๋ฅผ ์•Œ์ง€ ๋ชปํ•ด๋„ ๊ดœ์ฐฎ๊ณ , ๋ณ€์ˆ˜๋กœ ์ธํ•ด์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚  ์œ„ํ—˜์ด ์ ์Šต๋‹ˆ๋‹ค.

ย ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„ ์—์„œ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ์กฐ๊ธˆ ๋” ์ž์„ธํžˆ ์ž‘์„ฑํ•ด๋’€์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ํฌ์ŠคํŒ…์„ ๋ณด๊ณ ๋‚˜์„œ ๋‚˜๋จธ์ง€ ๋‚ด์šฉ์„ ๋ณด๋Š”๊ฑธ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์˜ค๋ฅ˜๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๋ณ€์ˆ˜์˜ ์‚ฌ์šฉ์„ ์ง€์–‘ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋Š” ๊ฐ™์€ ์ž…๋ ฅ์„ ๋„ฃ์—ˆ์„ ๋•Œ, ํ•ญ์ƒ ๊ฐ™์€ ์ถœ๋ ฅ ๊ฐ’์„ ๋‚ด๋ณด๋‚ด๋Š” ํ•จ์ˆ˜๋กœ ์™ธ๋ถ€์˜ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์™ธ๋ถ€์˜ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๋ณ€์ˆ˜๋กœ ์ธํ•ด์„œ ํ•จ์ˆ˜๊ฐ€ ์˜ˆ์ธกํ•˜์ง€ ๋ชปํ•œ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Side-effect๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์ฐฉ์˜ค๋กœ ์ธํ•œ ์˜ค๋ฅ˜, ์Šค๋ ˆ๋“œ ๋™์‹œ ์ ‘๊ทผ์— ์˜ํ•œ ์˜ค๋ฅ˜, ๊ต์ฐฉ ๋ฌธ์ œ๋กœ๋ถ€ํ„ฐ ์ž์œ ๋กœ์šด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•ด์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
Rx๋Š” ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ธฐ๋ณธ ๊ณจ๊ฒฉ์„ ๊ฐ–์ถ”๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋Š”๋ฐ ์žˆ์–ด์„œ ๋‹จ ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , subscribe ์ฝ”๋“œ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ์˜ค์ง ํ๋ฆ„์„ ์ƒ์„ฑํ•˜๊ณ  ์กฐ๋ฆฝํ•ด์„œ ์ƒ์ˆ˜๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ์ฝ”๋“œ๊ฐ€ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .
๋˜ํ•œ, ๊ฐ ๋ถ€๋ถ„์ด ์„œ๋กœ๋ฅผ ์•Œ์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๋ถ€๋ถ„์ด ๋ณ€๊ฒฝ๋  ๋•Œ ๋ฐ›๋Š” ์˜ํ–ฅ์ด ์ตœ์†Œํ™”๋ฉ๋‹ˆ๋‹ค.
๊ฐ€๋…์„ฑ, ์žฌ์‚ฌ์šฉ์„ฑ, ๋…๋ฆฝ์„ฑ, ์œ ์ง€๋ณด์ˆ˜์„ฑ ๋ฉด์—์„œ ์ข‹์€ ์ฝ”๋“œ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋Š”๊ฒ๋‹ˆ๋‹ค.

ย ์ฐธ๊ณ  ์ž๋ฃŒ