Reactivecocoa: ReactiveCocoa ์กฐ์ง์œผ๋กœ Rex ์ด๋™

์— ๋งŒ๋“  2016๋…„ 04์›” 11์ผ  ยท  15์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: ReactiveCocoa/ReactiveCocoa

์ด๊ฒƒ์€ ์ด์ „์— ๋น„๊ณต์‹์ ์œผ๋กœ ์ œ์•ˆ ๋˜์—ˆ์œผ๋ฏ€๋กœ ์ด๋ฅผ ๊ณต์‹ํ™”ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์™œ์š”?

  1. ๋ฐœ๊ฒฌ ๊ฐ€๋Šฅ์„ฑ . Rex ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ž˜ ์•Œ๋ ค์ ธ ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ/์ด์Šˆ๊ฐ€ ์—ด๋ ค ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ต์€ "Rex์— ๋” ์ ํ•ฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค." ๋˜๋Š” "Rex๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค."์ž…๋‹ˆ๋‹ค. ReactiveCocoa org์˜ ์ผ๋ถ€๋กœ ๋งŒ๋“ค๋ฉด ์‚ฌ๋žŒ๋“ค์ด ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ( Organization root ๋กœ ์ด๋™ํ•˜์—ฌ) README์—์„œ ๋งํฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  2. ์‹ ๋ขฐ์„ฑ . ํ”„๋กœ์ ํŠธ์— ์ƒˆ ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ ์ž‘์„ฑ์ž๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€, ์ง€์›์„ ๋ฐ›์„์ง€, ์–ผ๋งˆ๋‚˜ ์ž˜ ์œ ์ง€ ๊ด€๋ฆฌ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ReactiveCocoa์˜ ์ด๋ฆ„์ด ๋’ค์— ์žˆ์œผ๋ฉด ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋‚˜๋Š” @neilpa ์˜ ๊ธฐ์ˆ ๊ณผ Rex์˜ ํ’ˆ์งˆ์„ ๋ณด์ฆํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ทธ๊ฐ€ ์—ฌ๊ธฐ(ReactiveCocoa ๋ฉ”์ธ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ)์™€ Rex ๋ชจ๋‘์—์„œ ์ˆ˜ํ–‰ํ•œ ์ž‘์—…์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ƒ๊ฐ์— ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๋Š” ๊ทธ๊ฒƒ์„ ์•Œ์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  3. ํ™•์žฅ . ReactiveCocoa๋Š” ํ•ต์‹ฌ์ด ๊ด€๋ จ ์—†๋Š” ์—ฐ์‚ฐ์ž/๊ธฐ๋Šฅ์œผ๋กœ ์˜ค์—ผ๋˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๋ฐ ๋งŽ์€ ์ดˆ์ ์„ ๋งž์ถฅ๋‹ˆ๋‹ค. ํ•œํŽธ์œผ๋กœ๋Š” API๋ฅผ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ์ข…์†์„ฑ์„ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ›Œ๋ฅญํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ํ•œํŽธ์œผ๋กœ๋Š” ์—„์ฒญ๋‚œ ์—ฐ์‚ฐ์ž๊ฐ€ ๋น ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ๋ชฉ๋ฐ›์ง€ ๋ชปํ•œ ํฐ ๊ทธ๋ฃน์€ UI ๊ทธ๋ฃน์ž…๋‹ˆ๋‹ค. ReactiveCocoa๊ฐ€ ์ด๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž๋Š” ์ด์ „ objective-c ์ฝ”๋“œ ๊ธฐ๋ฐ˜(RACSignal์—์„œ SignalProducer/Signal๋กœ)์—์„œ ์ด๋ฅผ ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Rex๋Š” ์ด๋ฏธ ReactiveCocoa org์— ํ™•์‹คํžˆ ๋„์›€์ด ๋  ๊ฝค ์ข‹์€ ์นดํƒˆ๋กœ๊ทธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋˜ํ•œ ์ด Repo์˜ ๋ถ€์‹ค์„ฑ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ข‹์€ ์œ„์น˜์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์—(4.1 ๋ฆด๋ฆฌ์Šค ํฌํ•จ) ์ด์ œ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๊ธฐ ์‹œ์ž‘ํ•  ๋•Œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(์ƒˆ๋กœ์šด ์—ฐ์‚ฐ์ž ๋ฐ ์ผ๊ธ‰ ์‹œ๋ฏผ UI ๋ฐ”์ธ๋”ฉ ํฌํ•จ).
  4. ๊ด€๋ฆฌ๊ฐ€ ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค . @neilpa ๋Š” pull ์š”์ฒญ์„ ๊ฒ€ํ† ํ•˜๊ณ  ๋ณ‘ํ•ฉํ•˜๋Š” ์ž‘์—…์„ ํ›Œ๋ฅญํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•ด ์™”์ง€๋งŒ ๋‚˜๋จธ์ง€ ReactiveCocoa ๊ตฌ์„ฑ์›๊ณผ ๋ถ€๋‹ด์„ ๊ณต์œ ํ•จ์œผ๋กœ์จ ํฌ๊ฒŒ ๊ฐœ์„ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

    ๋‹ค์Œ ๋‹จ๊ณ„

์Œ, ๋ฌผ๋ก  @neilpa ์™€ ๋‚˜๋จธ์ง€ ํŒ€ ๋ชจ๋‘ ์ด์— ๋™์˜ํ•˜๊ณ  ์ €์žฅ์†Œ ์†Œ์œ ๊ถŒ์„ ReactiveCocoa org๋กœ ์ด์ „ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. URL๊ณผ ๊ด€๋ จํ•˜์—ฌ Github์€ ๋ชจ๋“  ๋ฌด๊ฑฐ์šด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค .

proposal

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@lukaskubanek ๋‚˜๋Š” ์ฒซ ๋ฒˆ์งธ ์š”์ ์— ๋™์˜ํ•˜์ง€๋งŒ ๋‹ค์Œ์— ๋Œ€ํ•ด ์˜๊ฒฌ์ด ์—‡๊ฐˆ๋ฆฝ๋‹ˆ๋‹ค.

์ด๋ฆ„์„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ ‘๋‘์‚ฌ rex_xxx๋ฅผ rac_xxx๋กœ ๋ณ€๊ฒฝ

์ด๋ฆ„์„ ์ผ๊ด€๋˜๊ฒŒ ์œ ์ง€ํ•˜์ง€๋งŒ IMHO๋ฅผ ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ชจ๋‘ ํ•„์š”ํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ ์‹œ ๋‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ง„ํ–‰๋จ์— ๋”ฐ๋ผ Rex์˜ ์˜คํผ๋ ˆ์ดํ„ฐ ์‚ฌ์šฉ์„ ์ค‘๋‹จํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์—์„œ rex_ ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ํ•˜๋ฉด ์ด๋ฅผ ํ™•์ธํ•˜๊ณ  ์ข…์†์„ฑ์œผ๋กœ ์ œ๊ฑฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
  2. ํ•œ ์šด์˜์ž์—๊ฒŒ ์ด์ƒํ•œ ๋™์ž‘์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฌธ์ œ(์งˆ๋ฌธ ๋˜๋Š” ๋ฒ„๊ทธ)๋ฅผ ์—ฌ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์ฆ‰์‹œ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์ดˆ๋ณด์ž๊ฐ€ ํ•ต์‹ฌ ์—ฐ์‚ฐ์ž๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  15 ๋Œ“๊ธ€

Rex๋ฅผ ReactiveCocoa ์กฐ์ง์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์— ์ฐฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ์ธ ๋†€์ดํ„ฐ๋กœ ์‹œ์ž‘ํ–ˆ์ง€๋งŒ ๋” ์œ ์šฉํ•œ ๊ฒƒ์œผ๋กœ ๋ณ€๋ชจํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋” ์ด์ƒ ์ผ์ƒ ์—…๋ฌด์—์„œ RAC๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์†Œ์œ ๊ถŒ์„ ๋ถ€์—ฌํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค.

๋ฐฉ์•„์‡ ๋ฅผ ๋‹น๊ธฐ๊ธฐ ์ „์— @NachoSoto ์™€ @mdiep ์ด ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ๋Š๋ผ๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์™„์ „ํžˆ ์ฐธ์—ฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์—ฐ์‚ฐ์ž/๊ตฌํ˜„์ด ํ‘œ์ค€์— ๋ถ€ํ•ฉํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ํ†ต๊ณผ/๋น ๋ฅธ ์ฝ”๋“œ ๊ฒ€ํ† ๋ฅผ ์ œ์•ˆํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋‚˜๋Š” ๊ธฐ์˜๊ฒŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค). @neilpa ๋ฅผ ์•„๋Š” 1์ดˆ :)), ํ•˜์ง€๋งŒ ๋‹ค์Œ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด:

  • ์–ด๋–ค ์—ฐ์‚ฐ์ž๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(์ผ๋ถ€ ์ œ๊ฑฐ ๊ฐ€๋Šฅ? idk).
  • ๊ฐœ์„  ์˜์—ญ๊ณผ ๋ฏธํ•ด๊ฒฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋” ์‰ฝ๊ฒŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ๋ผ๋ฉด ์ข€ ๋” ๊ณต์‹์ ์ธ ์ด๋ฆ„์ด ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. "Rex"๋Š” ๋‚ด๊ฐ€ ๋ณผ ๋•Œ ReactiveCocoa๋ฅผ ๋– ์˜ฌ๋ฆฌ๊ฒŒ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ์ด๋ฆ„์ด ๋ฌด์—‡์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์ด๋ฆ„์— "ReactiveCocoa" ๋˜๋Š” "Reactive"๋งŒ ์žˆ๋Š” ๊ฒƒ์ด ๋” ๋‚˜์€ IMO์ž…๋‹ˆ๋‹ค.

Rex๋ฅผ ์‹ค์ œ๋กœ ๋ณธ ์ ์€ ์—†์ง€๋งŒ ReactiveCocoa org์—์„œ UI ์ค‘์‹ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๋Š” ์•„์ด๋””์–ด๊ฐ€ ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค. ๋ ‰์Šค๋Š” ์ข‹์€ ์ถœ๋ฐœ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๐Ÿ‘ @NachoSoto๋ฅผ ๋จผ์ € ๋ณด์‹œ๋Š” ๊ฒƒ๋„ ์ข‹์€ ์•„์ด๋””์–ด์ธ ๊ฒƒ ๊ฐ™์•„์š”.

์ผ๋ฐ˜์ ์œผ๋กœ RAC์— ๋Œ€ํ•œ ํ•ต์‹ฌ ๊ธฐ์—ฌ์ž๋ฅผ ๋” ์ฐพ์•„์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋‘๊ฐ€ ๊ฝค ์–‡๊ฒŒ ํผ์ง„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@tonyarnold ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. โœจ

@mdiep ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ Rex๋Š” ๋ฌธ์„œ(README) ์ธก๋ฉด์—์„œ ์•ฝ๊ฐ„์˜ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜๋Š” ๋Œ€์‹  ์นดํƒˆ๋กœ๊ทธ๊ฐ€ ์ œ๊ณตํ•˜๋Š” UI ๋ฐ”์ธ๋”ฉ์˜ ์ข…๋ฅ˜๋ฅผ ์‚ฌ๋žŒ๋“ค์ด ์•Œ ์ˆ˜ ์žˆ๋„๋ก ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋ฌธ์„œํ™”ํ•ด์•ผ ํ•˜๋Š” ๊ธฐํƒ€ ์—ฐ์‚ฐ์ž๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ RAC์— ๋Œ€ํ•œ ํ•ต์‹ฌ ๊ธฐ์—ฌ์ž๋ฅผ ๋” ์ฐพ์•„์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋‘๊ฐ€ ๊ฝค ์–‡๊ฒŒ ํผ์ง„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ €๋„ ์—ฌ๊ธฐ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ•ด์•ผ ํ•  ์ผ์ด ๊ฝค ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋ฏธํ•ด๊ฒฐ ๋ฌธ์ œ ๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  2. ์—ฌ๊ธฐ ์—์„œ ์ˆ˜ํ–‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์‚ฌ์šฉ ์˜ˆ๋ฅผ ๋” ์ถ”๊ฐ€ ํ•˜๊ณ  ์ด์— ๋Œ€ํ•œ ๋ฌธ์„œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. RACNest ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ฝ”๋“œ ์กฐ๊ฐ ๋Œ€์‹  ๋Œ€ํ™”ํ˜• ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
  3. ์ผ๋ถ€ ์ค‘๋‹จ๋œ ํ”„๋กœ์ ํŠธ( this , this ๋ฐ this )๋ฅผ ๋‹ซ๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ์–ด์ฉŒ๋ฉด @jspahrsummers ๊ฐ€ ์ด ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๊ทธ์˜ POV๋ฅผ ์šฐ๋ฆฌ์™€ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ์ž ์žฌ์ ์œผ๋กœ ์†๋„๋ฅผ ๋†’์ด๊ณ  ์—ฌ๊ธฐ์—์„œ RxSwift๊ฐ€ ์ˆ˜ํ–‰ํ•œ ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค(์˜ˆ: Alamofire ์™€ ๊ฐ™์€ ๊ฒƒ์— ๋Œ€ํ•œ ๋ฐ”์ธ๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Œ). ์ด๊ฒƒ์€ ์ƒ๋‹นํ•œ ์ž‘์—…๋Ÿ‰์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ํ”„๋ ˆ์ž„์›Œํฌ์— ์ƒˆ๋กœ์šด ์‚ฌ๋žŒ๋“ค์„ ๋Œ์–ด๋“ค์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค(์ด๊ฒƒ์ด RxSwift๊ฐ€ ์ธ๊ธฐ๋ฅผ ์–ป๊ณ  ์žˆ๋Š” ์ด์œ  ์ค‘ ํ•˜๋‚˜๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค).

ํ˜„์žฌ ์ง์žฅ์—์„œ Rex์™€ ReactiveCocoa๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•œ ๊ณณ์— ๋„์›€์„ ๋“œ๋ฆด ์ˆ˜ ์žˆ์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

@RuiAAPeres ๋Š” ReactiveCocoa์™€ Rex๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ํ™๋ณดํ•˜๋Š” ๋ฐ ์—„์ฒญ๋‚œ ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์˜€์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๊ทธ๊ฐ€ ์ข‹์€ ํ•ต์‹ฌ ๊ธฐ์—ฌ์ž๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ฐ”์ธ๋”ฉ์„ ํ˜„๋Œ€ํ™”ํ•˜๊ณ  ์ƒˆ๋กœ์šด ๋ฐ”์ธ๋”ฉ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์•„์ง ํ•ด์•ผ ํ•  ์ผ์ด ๋งŽ์ด ์žˆ์œผ๋ฉฐ ์ด๋ฅผ ๋‹ฌ์„ฑํ•˜๋Š” ๋ฐ ์ข‹์€ ์ž์‚ฐ์ด ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ํ˜„์žฌ ์ง์žฅ์—์„œ ReactiveCocoa์™€ Rex๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋‚ด๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋„์›€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ  ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ๊ฐœ์ธ ๋†€์ดํ„ฐ https://github.com/inamiy/ReactiveCocoaCatalog/pull/8์— Rex ๋ฐ๋ชจ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ง€๊ธˆ๊นŒ์ง€๋Š” ์ •๋ง ์ข‹์€ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” org๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Rex๋ฅผ ReactiveCocoa์˜ ๊ณต์‹ ์ผ๋ถ€๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์ข‹์€ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค. Swift๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ๋กœ ์‰ฝ๊ฒŒ ๋ถ„ํ• ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ธฐ๋ณธ ๋ชจ๋“ˆ์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ์œ ์ง€ํ•˜๊ณ  UI๋ณ„ ํ™•์žฅ์„ ์œ„ํ•œ ๋‘ ๋ฒˆ์งธ ๋ชจ๋“ˆ์„ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ด ํ™•์‹คํžˆ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

  • ReactiveCocoa์˜ ํ™•์žฅ์ด๋ฉฐ (๋Œ€๋ถ€๋ถ„) UI์— ๊ด€ํ•œ ๊ฒƒ์ž„์„ ๋ถ„๋ช…ํžˆ ํ•˜๊ธฐ ์œ„ํ•ด Rex์˜ ์ด๋ฆ„์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค(@tonyarnold๊ฐ€ ์–ธ๊ธ‰ํ•จ).
  • ์ด๋ฆ„์„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ ‘๋‘์‚ฌ rex_xxx ๋ฅผ rac_xxx ๋กœ ๋ณ€๊ฒฝ

@lukaskubanek ๋‚˜๋Š” ์ฒซ ๋ฒˆ์งธ ์š”์ ์— ๋™์˜ํ•˜์ง€๋งŒ ๋‹ค์Œ์— ๋Œ€ํ•ด ์˜๊ฒฌ์ด ์—‡๊ฐˆ๋ฆฝ๋‹ˆ๋‹ค.

์ด๋ฆ„์„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ ‘๋‘์‚ฌ rex_xxx๋ฅผ rac_xxx๋กœ ๋ณ€๊ฒฝ

์ด๋ฆ„์„ ์ผ๊ด€๋˜๊ฒŒ ์œ ์ง€ํ•˜์ง€๋งŒ IMHO๋ฅผ ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ชจ๋‘ ํ•„์š”ํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ ์‹œ ๋‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ง„ํ–‰๋จ์— ๋”ฐ๋ผ Rex์˜ ์˜คํผ๋ ˆ์ดํ„ฐ ์‚ฌ์šฉ์„ ์ค‘๋‹จํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์—์„œ rex_ ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ํ•˜๋ฉด ์ด๋ฅผ ํ™•์ธํ•˜๊ณ  ์ข…์†์„ฑ์œผ๋กœ ์ œ๊ฑฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
  2. ํ•œ ์šด์˜์ž์—๊ฒŒ ์ด์ƒํ•œ ๋™์ž‘์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฌธ์ œ(์งˆ๋ฌธ ๋˜๋Š” ๋ฒ„๊ทธ)๋ฅผ ์—ฌ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์ฆ‰์‹œ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์ดˆ๋ณด์ž๊ฐ€ ํ•ต์‹ฌ ์—ฐ์‚ฐ์ž๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ Swift ์ฝ”๋“œ, Obj-C ์ฝ”๋“œ ๋ฐ Swift <-> Obj-C ๋ธŒ๋ฆฌ์ง€๋ฅผ ๋ณ„๋„์˜ repos(#2807)๋กœ ์˜ฎ๊ธฐ๊ณ  Cocoa ๋ฐ”์ธ๋”ฉ์„ ์œ„ํ•ด ์ด repo๋ฅผ ๋‚จ๊ฒจ๋‘๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋…ผ์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ Rex๋ฅผ ์˜ฎ๊ฒจ์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— RAC 5๋กœ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

@neilpa @NachoSoto ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์„ธ์š”?

ReactiveCocoa ObjC API์— ๋Œ€ํ•œ Rex ๋ฐ Swift ๋ฐ”์ธ๋”ฉ์˜ ์ข…์†์„ฑ์ด ๋ถ„๋ฆฌ ์ค‘์— ์ œ๊ฑฐ๋ฉ๋‹ˆ๊นŒ? ์ฆ‰, Swift์—์„œ ๋‹ค์‹œ ๊ตฌํ˜„๋ฉ๋‹ˆ๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด Swift ์‚ฌ์šฉ์ž๋Š” ์—ฌ์ „ํžˆ ๋ช‡ ๊ฐ€์ง€ ๋ธŒ๋ฆฌ์ง€ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ „์ฒด ObjC ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋นŒ๋“œํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถ„ํ•  IMO๋Š” ์œ ์ง€ ๊ด€๋ฆฌ ์ด์™ธ์˜ ์ž‘์—…์—์„œ๋Š” ์‹ค์ œ๋กœ ํšจ๊ณผ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ReactiveCocoa ObjC API์— ๋Œ€ํ•œ Rex ๋ฐ Swift ๋ฐ”์ธ๋”ฉ์˜ ์ข…์†์„ฑ์ด ๋ถ„๋ฆฌ ์ค‘์— ์ œ๊ฑฐ๋ฉ๋‹ˆ๊นŒ? ์ฆ‰, Swift์—์„œ ๋‹ค์‹œ ๊ตฌํ˜„๋ฉ๋‹ˆ๊นŒ?

๋„ค! ๊ทธ๊ฒƒ์€ ๋ถ„๋ช…ํžˆ ์ผ๋ถ€ Objective-C๋ฅผ ํฌํ•จํ•˜์ง€๋งŒ ReactiveObjC๋Š” ํฌํ•จํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ Rex ์ฝ”๋“œ๋ฅผ RAC 5๋กœ ์ด ์ €์žฅ์†Œ๋กœ ์˜ฎ๊ฒจ์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋™์˜ํ•˜์ง€๋งŒ repo ๊ธฐ๋ก์— ๋Œ€ํ•ด ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ •์ƒ์ ์ธ repo ๊ธฐ๋ก์„ ์œ ์ง€ํ•˜๋Š” ์ด๋™/๋ฆฌ๋ฒ ์ด์Šค/๋ถ„ํ• ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ณ„ํš์„ ์ˆ˜๋ฆฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž ์žฌ์ ์ธ subtree split ์˜ต์…˜์ด ์—†๋Š” ๋ฏธํ•ด๊ฒฐ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

#3210 ๋•๋ถ„์— ์ด์ œ ๋๋‚œ ๊ฒƒ ๊ฐ™์•„์š”!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰