์ž‘๋…„ ์Šคํ† ๋ธŒ์บ ํ”„ ์‚ฌ์ „๊ณผ์ œ๋กœ ๋ธ”๋กœ๊ทธ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด์„œ ๊นจ๋‹ฌ์€ ์ ์ด ์œ ์—ฐํ•˜์ง€ ๋ชปํ•œ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ๋ฐœ๋กœ ์ธํ•ด ์ ์  ์ŠคํŒŒ๊ฒŒํ‹ฐ ์ฝ”๋“œ๊ฐ€ ๋˜๋Š” ์ ์ด ์•„์‰ฌ์› ์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ด๋ฒˆ ๊ฒŒ์Šค๋ฏธ iOS์•ฑ์€ RxSwift๋ฅผ ์ ์šฉํ•˜์—ฌ ํด๋ฆฐ ์ฝ”๋“œ๋ฅผ ์ง€ํ–ฅํ•˜๊ณ ์ž ํ•˜์˜€์œผ๋‚˜, ์œ ํˆฌ๋ธŒ ๊ณฐํŠ€๊น€ ์˜์ƒ ํ•˜๋‚˜๋งŒ ๋ณด๊ณ  ์–•์€ ์ง€์‹์œผ๋กœ ์‹ค์ „์— ์ ์šฉํ•˜๋ ค๋‹ˆ ์–ด๋ ค์›Œ์„œ ๊นŠ์€ ์ดํ•ด ๊ธฐ๋ฐ˜ ๋™์ž‘ ์›๋ฆฌ ๋ฐ ํŠน์ง•์„ ์ž˜ ํŒŒ์•…ํ•˜๊ณ  ํ™œ์šฉํ•˜๊ณ ์ž ๊ฐœ๋… ์ •๋ฆฌ๋ฅผ ๋“ค์–ด๊ฐ€๊ณ ์ž ํ•œ๋‹ค!

์ดํ›„์— ๋‚ด๊ฐ€ RxSwift๋กœ ์ง๋ฉดํ•œ ๊ธฐ์ˆ ์  ์–ด๋ ค์›€์„ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€๋„ ํฌ์ŠคํŒ…ํ• ๊บผ๋‹ค~!

1๏ธโƒฃ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Reactive Programming)์ด๋ž€?

๊ธฐ์กด์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์€ ์ปดํ“จํ„ฐ ํ•˜๋“œ์›จ์–ด์—๊ฒŒ ๋ฌด์—‡์ธ๊ฐ€๋ฅผ ์ฒ˜๋ฆฌํ•ด๋‹ฌ๋ผ๋Š” ๋ช…๋ น์„ ํ•˜๋Š” ๋ฐฉ์‹์ด์˜€๊ณ , ๊ทธ ๋ช…๋ น๋“ค์€ ์–ด๋– ํ•œ ์ ˆ์ฐจ์— ๋”ฐ๋ผ ์ˆœ์„œ๋Œ€๋กœ ์ง„ํ–‰๋œ๋‹ค.

ํ•˜์ง€๋งŒ Reactive Programming์€ ๋‹ค๋ฅธ ๋ฐฉ์‹!

Reactive Programming์€ ๋ช…๋ น๋“ค์ด ์‹คํ–‰๋˜๋Š” ์ ˆ์ฐจ ์ค‘์‹ฌ์ด ์•„๋‹Œ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ์ค‘์‹ฌ์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค.

  • ๋ฐ์ดํ„ฐ ํ๋ฆ„ ์ •์˜ -> ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์‹œ ๊ด€๋ จ ๋ช…๋ น์–ด ๋˜๋Š” ํ•จ์ˆ˜ ์‹คํ–‰

๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์€ ์‹œ์Šคํ…œ์— ์–ด๋–ค ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, ์–ด๋–ค ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ•„์š”ํ•œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ๊ธฐ๋ณธ ๋ฐฉ์‹

๋”ฐ๋ผ์„œ Reactive ํ”„๋กœ๊ทธ๋žจ์€ โ€œ์ฃผ๋ณ€ ํ™˜๊ฒฝ๊ณผ ๋Š์ž„์—†์ด ์ƒํ˜ธ์ž‘์šฉ์„ ํ•˜๋ฉด์„œ ํ”„๋กœ๊ทธ๋žจ์ด ์ฃผ๋„ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ํ™˜๊ฒฝ์ด ์ฃผ๋„ํ•˜๊ณ  ํ™˜๊ฒฝ์— ์˜ํ•œ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์•„ ๋™์ž‘ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจโ€œ์ด๋‹ค.

2๏ธโƒฃ RxSwift๋ž€?

RxSwift๋Š” Rx + Swift๋กœ ์ด๋ฃจ์–ด์ง„ ํ•ฉ์„ฑ์ธ๋ฐ, ์—ฌ๊ธฐ์„œ Rx๋Š” ReactiveX์ด๊ณ  ์ด๊ฒŒ ๋ญ”์ง€ ์•Œ๋ฉด RxSwift์— ๋Œ€ํ•ด์„œ๋„ ๊ฐ์ด ์žกํž ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ๊ฒŒ ๋ญ๋ƒ๋ฉด,,,

ReactiveX๋ž€?

ReactiveX๋Š” Reacitve eXtensions์˜ ์ค„์ž„๋ง!

ReactiveX ์›น์‚ฌ์ดํŠธ ์˜ ์†Œ๊ฐœ๊ธ€์„ ๋ณด๋ฉด

ReactiveX is a library for composing asynchronous and event-based programs by using observable sequences.
It extends the observer pattern to support sequences of data and/or events and adds operators that allow you to compose sequences together declaratively while abstracting away concerns about things like low-level threading, synchronization, thread-safety, concurrent data structures, and non-blocking I/O.
...
Why Use Observables?
..

ReactiveX๋Š” ๊ด€์ฐฐ ๊ฐ€๋Šฅํ•œ ์‹œํ€€์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ์‹ ๋ฐ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ณ 

์˜ต์ €๋ฒ„ ํŒจํ„ด์„ ํ™•์žฅํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋˜๋Š” ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์‹œํ€€์Šค๋ฅผ ์ง€์›ํ•˜๊ณ  ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ธฐ๋Šฅ ๋ฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์ฃผ๋Š” ์˜คํผ๋ ˆ์ดํ„ฐ๋ฅผ ์ง€์›ํ•ด์ค€๋‹ค๊ณ  ํ•œ๋‹ค.

์ด๋Š” ๋‹ค์–‘ํ•œ ์–ธ์–ด๋กœ ํ™•์žฅํ•˜์—ฌ ๋น„๋™๊ธฐ๋กœ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ!

๊ทธ๋ ‡๋‹ค๋ฉด RxSwift๋Š”?

RxSwift is a library for composing asynchronous and event-based code by using observable sequences and functional style operators, allowing for parameterized execution via schedulers.
  • RxSwift๋Š” ์˜ต์ €๋ฒ„๋ธ” ์‹œํ€€์Šค์™€ ํ•จ์ˆ˜ ์Šคํƒ€์ผ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ๋ฐ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    • ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ํ†ตํ•ด์„œ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™” ๋œ ์‹คํ–‰์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.
    • ๋น„๋™๊ธฐ ๊ฐ’์„ ์œ ํ‹ธ๋ฆฌํ‹ฐํ•˜๊ฒŒ ๋ฆฌํ„ด๊ฐ’์„ ์ „๋‹ฌํ•˜๊ฒŒ ํ•ด์คŒ. (๋น„๋™๊ธฐ๋ฅผ completion์—†์ด ์ด์šฉ ๊ฐ€๋Šฅ!)
  • ๋ณธ์งˆ์ ์œผ๋กœ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ์— ๋ฐ˜์‘ํ•˜๊ณ  ์ˆœ์ฐจ์ ์œผ๋กœ ๊ฒฉ๋ฆฌ๋œ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ์„ ๋‹จ์ˆœํ™” ํ•œ๋‹ค.

๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ RxSwift์— ๋Œ€ํ•ด ๊ฐ„๋žตํžˆ ์•Œ์•„๋ดค์œผ๋‹ˆ, ๋‹ค์Œ ํŽธ์—์„œ๋Š” ๋” ์ž์„ธํ•˜๊ฒŒ RxSwift๋ฅผ ํŒŒ๋ณด๋Š”๊ฑธ๋กœ!