์ง์์ ์ข๊ณ ํ๋ฅญํฉ๋๋ค. ํ์ง๋ง ์์ ๋ ๋ฐ์ดํฐ๋ฅผ '์๋์ ์ ์ฅ' ์ํ์์ '๋ฅ๋์ ์ฌ์ฉ' ์ํ๋ก ์ฎ๊ฒจ ํ์ฉํ๋ ์ฐ์ต๋ ํ์ํ๋ค. ์ด๋ก ๊ต์ก์ด ์๋ฌด๋ฆฌ ํ๋ฅญํ๋๋ผ๋ "ํ์ฅ"์์์ ์์
์ ์ฌ์ ํ โโํ์ํฉ๋๋ค. ์์ ๋ด์ฉ์ ๋ฌผ๋ก ์ํํธ์จ์ด ๊ฐ๋ฐ์ ํฌํจํ ๊ฑฐ์ ๋ชจ๋ ์ฐ๊ตฌ ๋ถ์ผ์ ์ ์ฉ๋ฉ๋๋ค.
์ฌํด GeekBrains๋ ์จ๋ผ์ธ ๋ํ GeekUniversity์ ๋ชจ๋ฐ์ผ ๊ฐ๋ฐ ๊ต์์ง์ ์ผ๋ถ๋ก์ ์ ๋ฌธ ๊ฐ๋ฐ์๋ก ๊ตฌ์ฑ๋ ๋ํํ ์์ด์ ์์ธ AGIMA์ ํ๋ ฅํ๊ธฐ ์์ํ์ต๋๋ค(๋ณต์กํ ๊ณ ๋ถํ ํ๋ก์ ํธ, ๊ธฐ์ ํฌํธ ๋ฐ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋ ๊ฒ์ด ์ ๋ถ์ ๋๋ค). AGIMA์ GeekBrains๋ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ค์ ๋ฌธ์ ๋ฅผ ์ฌ์ธต์ ์ผ๋ก ๋ค๋ฃจ๊ธฐ ์ํ ์ ํ ๊ณผ๋ชฉ์ ๋ง๋ค์์ต๋๋ค.
์ผ๋ง ์ ์ฐ๋ฆฌ๋ iOS ์ ๋ฌธ๊ฐ์ธ Igor Vedeneev์ Android ์ ๋ฌธ๊ฐ์ธ Alexander Tizik๊ณผ ์ด์ผ๊ธฐ๋ฅผ ๋๋ด์ต๋๋ค. ๋๋ถ์ ๋ชจ๋ฐ์ผ ๊ฐ๋ฐ ์ ํ ๊ณผ๋ชฉ์ด ์ค์ฉ์ฑ์ผ๋ก ํ์ฑํด์ก์ต๋๋ค.
RxSwift๋ฅผ ์๋ก ์ฌ์ฉํ๋ iOS์ ๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ
์ ํ ๊ต์ฌ Igor Vedeneev: "RxSwift๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์ด ์ฑ๊ณตํ ๊ฒ์
๋๋ค."
ํ์๋ค์ ์ ํ ๊ณผ๋ชฉ ๋์ ์ด๋ค ์ ๋ณด๋ฅผ ๋ฐ๊ฒ ๋๋์?
์ฐ๋ฆฌ๋ ํ๋ ์์ํฌ์ ๊ธฐ๋ฅ์ ๋ํด ์ด์ผ๊ธฐํ ๋ฟ๋ง ์๋๋ผ ํด๋์ MVVM + RxSwift ์กฐํฉ์์ ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ ๋ณด์ฌ์ค๋๋ค. ๋ช ๊ฐ์ง ์ค์ ์ฌ๋ก๋ ๋
ผ์๋ฉ๋๋ค. ์ป์ ๋ฐ์ดํฐ๋ฅผ ํตํฉํ๊ธฐ ์ํด ์ฐ๋ฆฌ๋ ํ์ฅ ์๋ ์กฐ๊ฑด์ ์ต๋ํ ๊ฐ๊น์ด ์ ํ๋ฆฌ์ผ์ด์
์ ์์ฑํฉ๋๋ค. ์ด๊ฒ์ ๋ค์์ ์ฌ์ฉํ๋ ์์
๊ฒ์ ์์ฉ ํ๋ก๊ทธ๋จ์
๋๋ค.
RxSwift - iOS ํ๋ก๊ทธ๋๋จธ์๊ฒ ์ด ํ๋ ์์ํฌ๊ฐ ํ์ํ ์ด์ ๋ ๋ฌด์์ด๋ฉฐ, ๊ฐ๋ฐ์์ ์ถ์ ์ด๋ป๊ฒ ๋ ์ฝ๊ฒ ๋ง๋ค์ด ์ค๊น์?
RxSwift ํฉ๋ฆฌํ๋ ์ด๋ฒคํธ ์คํธ๋ฆผ ๋ฐ ๊ฐ์ฒด ๊ฐ์ ์ฐ๊ฒฐ๊ณผ ํจ๊ป ์๋ํฉ๋๋ค. ๊ฐ์ฅ ๊ฐ๋จํ๊ณ ๊ฐ์ฅ ๋ถ๋ช ํ ์๋ ๋ฐ์ธ๋ฉ์ ๋๋ค. ์๋ฅผ ๋ค์ด viewModel์ ๋ณ์์ ์ ๊ฐ์ ์ค์ ํ๊ธฐ๋ง ํ๋ฉด ์ธํฐํ์ด์ค๋ฅผ ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ธํฐํ์ด์ค๋ ๋ฐ์ดํฐ ์ค์ฌ์ด ๋ฉ๋๋ค. ๋ํ RxSwift๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ธ์ ์คํ์ผ๋ก ์์คํ ์ ์ค๋ช ํ ์ ์์ผ๋ฏ๋ก ์ฝ๋๋ฅผ ๊ตฌ์ฑํ๊ณ ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์์ต๋๋ค. ์ด ๋ชจ๋ ๊ฒ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ๊ฐ๋ฐํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๊ฐ๋ฐ์์ ๊ฒฝ์ฐ ํ๋ ์์ํฌ์ ๋ํ ์ง์์ ์ด๋ ฅ์์ ์ข์ ํ๋ฌ์ค๊ฐ ๋ฉ๋๋ค. ๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๋ํ ์ดํด, ํนํ RxSwift์ ๋ํ ๊ฒฝํ์ด ์์ฅ์์ ๊ฐ์น๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ค๋ฅธ ํ๋ ์์ํฌ๋ณด๋ค ์ด ํน์ ํ๋ ์์ํฌ๋ฅผ ์ ํํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
RxSwift๋ ๊ฐ์ฅ ํฐ ์ปค๋ฎค๋ํฐ๋ฅผ ๋ณด์ ํ๊ณ ์์ต๋๋ค. ์ฆ, ๊ฐ๋ฐ์๊ฐ ์ง๋ฉดํ ๋ฌธ์ ๊ฐ ์ด๋ฏธ ๋๊ตฐ๊ฐ์ ์ํด ํด๊ฒฐ๋์์ ๊ฐ๋ฅ์ฑ์ด ๋ ํฝ๋๋ค. ๋ํ ๋ง์ ์์ ๋ฐ์ธ๋ฉ์ด ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณต๋ฉ๋๋ค. ๋ํ RxSwift๋ ReactiveX์ ์ผ๋ถ์ ๋๋ค. ์ฆ, ์๋ฅผ ๋ค์ด Android์ฉ ์๋ ๋ก๊ทธ(RxJava, RxKotlin)๊ฐ ์์ผ๋ฉฐ ์ํฌ์ต์ ๋๋ฃ ์ค ์ผ๋ถ๋ iOS์์ ์๋ํ๊ณ ๋ค๋ฅธ ์ผ๋ถ๋ Android์์ ์๋ํ๋ค๋ ์ฌ์ค์๋ ๋ถ๊ตฌํ๊ณ ์๋ก ๋์ผํ ์ธ์ด๋ก ๋งํ ์ ์์ต๋๋ค.
ํ๋ ์์ํฌ๋ ์ง์์ ์ผ๋ก ์ ๋ฐ์ดํธ๋๊ณ , ์ฌ์ํ ๋ฒ๊ทธ๊ฐ ์์ ๋๋ฉฐ, Swift ์ ๋ฒ์ ์ ๊ธฐ๋ฅ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋๊ณ , ์ ๋ฐ์ธ๋ฉ์ด ์ถ๊ฐ๋ฉ๋๋ค. RxSwift๋ ์คํ ์์ค์ด๋ฏ๋ก ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ๋ฅผ ์ ์์ต๋๋ค. ๊ฒ๋ค๊ฐ ์ง์ ์ถ๊ฐํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค.
RxSwift๋ ์ด๋์ ์ฌ์ฉํด์ผ ํฉ๋๊น?
- ๋ฐ์ธ๋ฉ. ์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ๋ฐ์ํ๋ ๊ฒ์ฒ๋ผ UI๋ฅผ ๋ณ๊ฒฝํ๋ ๊ธฐ๋ฅ์ธ UI์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์ ๋ฐ์ดํธํ ์๊ฐ์์ ์ธํฐํ์ด์ค์ ๋ช ์์ ์ผ๋ก ์๋ฆฌ์ง ์์ต๋๋ค.
- ๊ตฌ์ฑ ์์์ ์์
๊ฐ์ ๊ด๊ณ. ๋จ์ง ์์
๋๋ค. ๋คํธ์ํฌ์์ ๋ฐ์ดํฐ ๋ชฉ๋ก์ ๊ฐ์ ธ์์ผ ํฉ๋๋ค. ์ฌ์ค ์ด๊ฒ์ ๊ทธ๋ ๊ฒ ๊ฐ๋จํ ์์
์ด ์๋๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด ์์ฒญ์ ๋ณด๋ด๊ณ , ์๋ต์ ๊ฐ์ฒด ๋ฐฐ์ด๋ก ๋งคํํ๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ณ , UI๋ก ๋ณด๋ด์ผ ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ค์ํ ๊ตฌ์ฑ ์์๊ฐ ์ด๋ฌํ ์์
์ ์ํํฉ๋๋ค. (์ฐ๋ฆฌ๋ ์์น์ ์ข์ํ๊ณ ๋ฐ๋ฆ
๋๋ค.
๊ณ ์ฒด ?). RxSwift์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์์คํ ์ด ๋ฌด์์ ํ ๊ฒ์ธ์ง, ์ด๋ป๊ฒ ํ ๊ฒ์ธ์ง๋ฅผ ๋ค๋ฅธ ๊ณณ์์ ์ค๋ช ํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ง๋๋ค. ์ด๋ก ์ธํด ์ฝ๋ ๊ตฌ์ฑ์ด ๋ ์ ์ด๋ฃจ์ด์ง๊ณ ๊ฐ๋ ์ฑ์ด ํฅ์๋ฉ๋๋ค. ์๋์ ์ผ๋ก ์ฝ๋๋ ๋ชฉ์ฐจ์ ์ฑ ์์ฒด๋ก ๋๋ ์ ์์ต๋๋ค.
Kotlin์ ์ฝ๋ฃจํด
์ ํ ๊ณผ๋ชฉ ๊ต์ฌ 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