RxSwift ๋ฐ Kotlin์˜ ์ฝ”๋ฃจํ‹ด - AGIMA ๋ฐ GeekBrains์˜ ๋ชจ๋ฐ”์ผ ๊ฐœ๋ฐœ ์„ ํƒ ๊ณผ๋ชฉ

RxSwift ๋ฐ Kotlin์˜ ์ฝ”๋ฃจํ‹ด - AGIMA ๋ฐ GeekBrains์˜ ๋ชจ๋ฐ”์ผ ๊ฐœ๋ฐœ ์„ ํƒ ๊ณผ๋ชฉ

์ง€์‹์€ ์ข‹๊ณ  ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ˆ˜์‹ ๋œ ๋ฐ์ดํ„ฐ๋ฅผ '์ˆ˜๋™์  ์ €์žฅ' ์ƒํƒœ์—์„œ '๋Šฅ๋™์  ์‚ฌ์šฉ' ์ƒํƒœ๋กœ ์˜ฎ๊ฒจ ํ™œ์šฉํ•˜๋Š” ์—ฐ์Šต๋„ ํ•„์š”ํ•˜๋‹ค. ์ด๋ก  ๊ต์œก์ด ์•„๋ฌด๋ฆฌ ํ›Œ๋ฅญํ•˜๋”๋ผ๋„ "ํ˜„์žฅ"์—์„œ์˜ ์ž‘์—…์€ ์—ฌ์ „ํžˆ โ€‹โ€‹ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ๋‚ด์šฉ์€ ๋ฌผ๋ก  ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์„ ํฌํ•จํ•œ ๊ฑฐ์˜ ๋ชจ๋“  ์—ฐ๊ตฌ ๋ถ„์•ผ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

์˜ฌํ•ด GeekBrains๋Š” ์˜จ๋ผ์ธ ๋Œ€ํ•™ GeekUniversity์˜ ๋ชจ๋ฐ”์ผ ๊ฐœ๋ฐœ ๊ต์ˆ˜์ง„์˜ ์ผ๋ถ€๋กœ์„œ ์ „๋ฌธ ๊ฐœ๋ฐœ์ž๋กœ ๊ตฌ์„ฑ๋œ ๋Œ€ํ™”ํ˜• ์—์ด์ „์‹œ์ธ AGIMA์™€ ํ˜‘๋ ฅํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค(๋ณต์žกํ•œ ๊ณ ๋ถ€ํ•˜ ํ”„๋กœ์ ํŠธ, ๊ธฐ์—… ํฌํ„ธ ๋ฐ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ „๋ถ€์ž…๋‹ˆ๋‹ค). AGIMA์™€ GeekBrains๋Š” ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์˜ ์‹ค์ œ ๋ฌธ์ œ๋ฅผ ์‹ฌ์ธต์ ์œผ๋กœ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ์„ ํƒ ๊ณผ๋ชฉ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์–ผ๋งˆ ์ „ ์šฐ๋ฆฌ๋Š” iOS ์ „๋ฌธ๊ฐ€์ธ Igor Vedeneev์™€ Android ์ „๋ฌธ๊ฐ€์ธ Alexander Tizik๊ณผ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆด์Šต๋‹ˆ๋‹ค. ๋•๋ถ„์— ๋ชจ๋ฐ”์ผ ๊ฐœ๋ฐœ ์„ ํƒ ๊ณผ๋ชฉ์ด ์‹ค์šฉ์„ฑ์œผ๋กœ ํ’์„ฑํ•ด์กŒ์Šต๋‹ˆ๋‹ค. RxSwift ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•œ ํŠน๋ณ„ ์ฝ”์Šค ะธ Kotlin์˜ ์ฝ”๋ฃจํ‹ด. ์ด ๊ธฐ์‚ฌ์—์„œ ๊ฐœ๋ฐœ์ž๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ์žˆ์–ด ๊ฐ ์˜์—ญ์˜ ์ค‘์š”์„ฑ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค.

RxSwift๋ฅผ ์˜ˆ๋กœ ์‚ฌ์šฉํ•˜๋Š” iOS์˜ ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

RxSwift ๋ฐ Kotlin์˜ ์ฝ”๋ฃจํ‹ด - AGIMA ๋ฐ GeekBrains์˜ ๋ชจ๋ฐ”์ผ ๊ฐœ๋ฐœ ์„ ํƒ ๊ณผ๋ชฉ
์„ ํƒ ๊ต์‚ฌ Igor Vedeneev: "RxSwift๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์„ฑ๊ณตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค."

ํ•™์ƒ๋“ค์€ ์„ ํƒ ๊ณผ๋ชฉ ๋™์•ˆ ์–ด๋–ค ์ •๋ณด๋ฅผ ๋ฐ›๊ฒŒ ๋˜๋‚˜์š”?

์šฐ๋ฆฌ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํด๋ž˜์‹ MVVM + RxSwift ์กฐํ•ฉ์—์„œ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์‹ค์ œ ์‚ฌ๋ก€๋„ ๋…ผ์˜๋ฉ๋‹ˆ๋‹ค. ์–ป์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ํ˜„์žฅ ์ž‘๋™ ์กฐ๊ฑด์— ์ตœ๋Œ€ํ•œ ๊ฐ€๊นŒ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜๋Š” ์Œ์•… ๊ฒ€์ƒ‰ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. iTunes ๊ฒ€์ƒ‰ API. ๊ฑฐ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์ ์šฉํ•˜๊ณ  MVC ํŒจ๋Ÿฌ๋‹ค์ž„์—์„œ RxSwift๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋” ๊ฐ„๋‹จํ•œ ์˜ต์…˜์„ ๊ณ ๋ คํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

RxSwift - iOS ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ์ด ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ด๋ฉฐ, ๊ฐœ๋ฐœ์ž์˜ ์‚ถ์„ ์–ด๋–ป๊ฒŒ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด ์ค„๊นŒ์š”?

RxSwift ํ•ฉ๋ฆฌํ™”๋Š” ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ ๋ฐ ๊ฐ์ฒด ๊ฐ„์˜ ์—ฐ๊ฒฐ๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๊ณ  ๊ฐ€์žฅ ๋ถ„๋ช…ํ•œ ์˜ˆ๋Š” ๋ฐ”์ธ๋”ฉ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด viewModel์˜ ๋ณ€์ˆ˜์— ์ƒˆ ๊ฐ’์„ ์„ค์ •ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ์ด ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ RxSwift๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„ ์–ธ์  ์Šคํƒ€์ผ๋กœ ์‹œ์Šคํ…œ์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž์˜ ๊ฒฝ์šฐ ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•œ ์ง€์‹์€ ์ด๋ ฅ์„œ์— ์ข‹์€ ํ”Œ๋Ÿฌ์Šค๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•œ ์ดํ•ด, ํŠนํžˆ RxSwift์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ์‹œ์žฅ์—์„œ ๊ฐ€์น˜๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๋ณด๋‹ค ์ด ํŠน์ • ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์„ ํƒํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

RxSwift๋Š” ๊ฐ€์žฅ ํฐ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง๋ฉดํ•œ ๋ฌธ์ œ๊ฐ€ ์ด๋ฏธ ๋ˆ„๊ตฐ๊ฐ€์— ์˜ํ•ด ํ•ด๊ฒฐ๋˜์—ˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋” ํฝ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋งŽ์€ ์ˆ˜์˜ ๋ฐ”์ธ๋”ฉ์ด ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ RxSwift๋Š” ReactiveX์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์˜ˆ๋ฅผ ๋“ค์–ด Android์šฉ ์•„๋‚ ๋กœ๊ทธ(RxJava, RxKotlin)๊ฐ€ ์žˆ์œผ๋ฉฐ ์›Œํฌ์ƒต์˜ ๋™๋ฃŒ ์ค‘ ์ผ๋ถ€๋Š” iOS์—์„œ ์ž‘๋™ํ•˜๊ณ  ๋‹ค๋ฅธ ์ผ๋ถ€๋Š” Android์—์„œ ์ž‘๋™ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์„œ๋กœ ๋™์ผํ•œ ์–ธ์–ด๋กœ ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ง€์†์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜๊ณ , ์‚ฌ์†Œํ•œ ๋ฒ„๊ทธ๊ฐ€ ์ˆ˜์ •๋˜๋ฉฐ, Swift ์ƒˆ ๋ฒ„์ „์˜ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜๊ณ , ์ƒˆ ๋ฐ”์ธ๋”ฉ์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. RxSwift๋Š” ์˜คํ”ˆ ์†Œ์Šค์ด๋ฏ€๋กœ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋”ฐ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ์ง์ ‘ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

RxSwift๋Š” ์–ด๋””์— ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

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

Kotlin์˜ ์ฝ”๋ฃจํ‹ด

RxSwift ๋ฐ Kotlin์˜ ์ฝ”๋ฃจํ‹ด - AGIMA ๋ฐ GeekBrains์˜ ๋ชจ๋ฐ”์ผ ๊ฐœ๋ฐœ ์„ ํƒ ๊ณผ๋ชฉ
์„ ํƒ ๊ณผ๋ชฉ ๊ต์‚ฌ Alexander Tizik: "ํ˜„๋Œ€์ ์ธ ๊ฐœ๋ฐœ์—๋Š” ํ˜„๋Œ€์ ์ธ ๊ธฐ์ˆ ์  ์ˆ˜๋‹จ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค."

๋ธŒ๋žœ๋“œ ๋ถ„๊ธฐ์˜ ์ผ๋ถ€๋กœ GeekBrains ๊ต์ˆ˜์ง„์—์„œ ๋ฌด์—‡์„ ๊ฐ€๋ฅด์น  ์˜ˆ์ •์ธ๊ฐ€์š”?

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

์šฐ๋ฆฌ๋Š” ์ฝ”๋ฃจํ‹ด์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๊นŠ์€ ์ง€์‹ ์—†์ด๋„(RxJava์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ๋Š” ๋งํ•  ์ˆ˜ ์—†์Œ) ์‹ค์ œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์ฒซ๋ˆˆ์— ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ด€์šฉ์  ์ฝ”๋“œ๋ฅผ ์ฝ”๋ฃจํ‹ด์— ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›๋‹ˆ๋‹ค. ๋˜ํ•œ MVI ๊ฐœ๋…์˜ ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค์™€ ๊ฐ™์€ ๋ณด๋‹ค ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ–‰์œ„์ž ๋ชจ๋ธ๊ณผ ๊ฐ™์€ ๋ณด๋‹ค ๋ณต์žกํ•œ ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์ดํ•ดํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ๋” ์ข‹์€ ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„ ํƒ ๊ณผ๋ชฉ์ด ๋…นํ™”๋˜๋Š” ๋™์•ˆ Kotlin Coroutines ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ถœ์‹œ๋˜์—ˆ์œผ๋ฉฐ, ์—ฌ๊ธฐ์— ์ˆ˜์—…์ด ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. Flow - ์œ ํ˜•์˜ ์œ ์‚ฌ Flowable ะธ Observable RxJava์—์„œ. ์—…๋ฐ์ดํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ž์˜ ๊ด€์ ์—์„œ ์ฝ”๋ฃจํ‹ด ๊ธฐ๋Šฅ์„ ์™„์„ฑ์‹œํ‚ต๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ์—ฌ์ „ํžˆ ๊ฐœ์„ ์˜ ์—ฌ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. kotlin/native์˜ ์ฝ”๋ฃจํ‹ด ์ง€์› ๋•๋ถ„์— Kotlin์—์„œ ๋‹ค์ค‘ ํ”Œ๋žซํผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ด๋ฏธ ๊ฐ€๋Šฅํ•˜๊ณ  ์ˆœ์ˆ˜ Kotlin์˜ RxJava ๋˜๋Š” ์œ ์‚ฌ ๊ธฐ๋Šฅ์ด ๋ถ€์กฑํ•˜์ง€ ์•Š๋‹ค๋Š” ์‚ฌ์‹ค์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , kotlin/native์˜ ์ฝ”๋ฃจํ‹ด ์ง€์›์€ ์•„์ง ์™„๋ฃŒ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐฐ์šฐ๋ผ๋Š” ๊ฐœ๋…์ด ์—†์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ Kotlin ํŒ€์€ ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ๋” ๋ณต์žกํ•œ ์•กํ„ฐ๋ฅผ ์ง€์›ํ•  ๊ณ„ํš์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Kotlin ์ฝ”๋ฃจํ‹ด - Kotlin ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์–ด๋–ป๊ฒŒ ๋„์›€์ด ๋˜๋‚˜์š”?

์ฝ”๋ฃจํ‹ด์€ ์ฝ๊ธฐ ์‰ฝ๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์•ˆ์ „ํ•˜๊ณ  ๋น„๋™๊ธฐ์ ์ด๋ฉฐ ๋™์‹œ์„ฑ์ด ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๊ธฐํšŒ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ์ด๋ฏธ ์‚ฌ์šฉ๋˜์—ˆ์„ ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๋น„๋™๊ธฐ ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐ ์ ‘๊ทผ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์–ด๋Œ‘ํ„ฐ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋ฃจํ‹ด์€ ์Šค๋ ˆ๋“œ์™€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฆ…๋‹ˆ๊นŒ?

Kotlin ํŒ€์€ ์ฝ”๋ฃจํ‹ด์„ ๊ฒฝ๋Ÿ‰ ์Šค๋ ˆ๋“œ๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ๋˜ํ•œ ์ฝ”๋ฃจํ‹ด์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ผ์‹œ ์ค‘์ง€๋œ ๊ณ„์‚ฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ถ€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ์Šค๋ ˆ๋“œ์— ์ง์ ‘์ ์œผ๋กœ ์˜์กดํ•˜์ง€ ์•Š์œผ๋ฉฐ ์Šค๋ ˆ๋“œ๋Š” ์ฝ”๋ฃจํ‹ด๋งŒ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

"์ˆœ์ˆ˜ํ•œ" Kotlin์œผ๋กœ๋Š” ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๊ฑฐ๋‚˜ ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ค์šด ๋ฌธ์ œ ์ค‘ ์ฝ”๋ฃจํ‹ด์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์‹ค์ œ ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

์‚ฌ์šฉ์ž ํด๋ฆญ ์ฒ˜๋ฆฌ, ์˜จ๋ผ์ธ ์ ‘์†, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—…๋ฐ์ดํŠธ ๊ตฌ๋… ๋“ฑ ๋ชจ๋“  ๋น„๋™๊ธฐ, ๋ณ‘๋ ฌ, "๊ฒฝ์Ÿ" ์ž‘์—…์€ ์ฝ”๋ฃจํ‹ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž˜ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

์ˆœ์ˆ˜ Kotlin์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ Java์—์„œ์™€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ์ˆ˜์ฒœ ๊ฐœ์˜ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋„์›€์œผ๋กœ ๊ฐ ํ”„๋ ˆ์ž„์›Œํฌ์—๋Š” ์žฅ๋‹จ์ ์ด ์žˆ์ง€๋งŒ ์–ธ์–ด ์ˆ˜์ค€ ์ง€์›์€ ์—†์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ, ๋‘ ์„ ํƒ ๊ณผ๋ชฉ(๊ทธ๋ฆฌ๊ณ  ์ฃผ์š” ๊ณผ๋ชฉ๋„)์€ ์™ธ๋ถ€ ์ƒํ™ฉ์˜ ๋ณ€ํ™”์— โ€‹โ€‹๋”ฐ๋ผ ์—…๋ฐ์ดํŠธ๋œ๋‹ค๋Š” ์ ์€ ์ฃผ๋ชฉํ•  ๋งŒํ•ฉ๋‹ˆ๋‹ค. ์–ธ์–ด๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ์— ์ค‘์š”ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด ๊ต์‚ฌ๋Š” ์ด๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ์„ ํ†ตํ•ด ๋งํ•˜์ž๋ฉด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์˜ ํ๋ฆ„์„ ๊ณ„์†ํ•ด์„œ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€