๋ชจ๋ฐ์ผ ์ฑ ๊ฐ๋ฐ์ ๋งฅ๋ฝ์์ Observable์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI) ๋๋ ์ ์ฒด ์ฑ ์ํคํ ์ฒ์์ ๊ตฌ์ฑ ์์ ๊ฐ์ ํจ์จ์ ์ธ ํต์ ๋ฐ ๋๊ธฐํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Observable์ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ด๋ฒคํธ๋ ๊ฐ์ ์์ฑํ ์ ์๋ ๊ฐ์ฒด์ด๋ฉฐ ์ฃผ๋ก ๋น๋๊ธฐ ์์ ์ ๊ด๋ฆฌํ๊ณ ์ฌ๋ฌ ๊ฐ ์คํธ๋ฆผ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฌํ ๊ฐ๋ ฅํ ๊ตฌ์ฑ์ ์ํ ๊ด๋ฆฌ ๋ฐ ๋ฐ์ดํฐ ํ๋ฆ ์ ์ด๋ฅผ ์ํ ์์ ์ ์ธ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์๊ฐ ๋ฐ์ํ ๋ฐ ๋ฐ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ๋์์ด ๋๋ฉฐ ๊ถ๊ทน์ ์ผ๋ก ์ฑ์ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅ์ฑ๊ณผ ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก Observable์ MVC(Model-View-Controller), MVVM(Model-View-ViewModel) ๋๋ ์ต๊ทผ ์ฃผ๋ชฉ๋ฐ๊ณ ์๋ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ ํจ๋ฌ๋ค์์ ํฌํจํ์ฌ ๋ค์ํ ๋ฐ์ดํฐ ํ๋ฆ ๋ฐ ์ํ ๊ด๋ฆฌ ํจํด์ ์ด์งํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ๋จ์์ฑ๊ณผ ์์ธก ๊ฐ๋ฅ์ฑ ๋๋ฌธ์ ๋๋ค. Observable์ ํนํ ์ฑ์ UI ๊ตฌ์ฑ ์์๊ฐ ์ฌ์ฉ์ ์ ๋ ฅ, ๋คํธ์ํฌ ์์ฒญ ๋๋ ํ์ฌ ํตํฉ๊ณผ ๊ฐ์ ์ฑ ์ํ ๋๋ ์ธ๋ถ ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ์ ๋ณ๊ฒฝ์ ๋ฐ์ํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ณต์กํ ๋น๋๊ธฐ ์์ ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ํจ์จ์ ์ธ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค. ์ฑ์ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ Observable์ ์ฆ๊ฐํ๋ ์ํธ ์์ฉ ์ง์ ๊ณผ ์ข ์์ฑ์ ๊ด๋ฆฌํ๋ ๋ฐ ๋์์ ์ฃผ์ด ์ฅ๊ธฐ์ ์ผ๋ก ์ฑ์ ํ์ฅ์ฑ๊ณผ ์ ์ง ๊ด๋ฆฌ๋ฅผ ๋์ฑ ์ฉ์ดํ๊ฒ ๋ง๋ญ๋๋ค.
Observable์ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ Android, iOS ๋๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ฐ์ ๋ค์ํ ํ๋ซํผ์์ ๊ตฌํ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด Kotlin ๋ฐ Jetpack Compose ์ฌ์ฉํ Android ๊ฐ๋ฐ์์ LiveData ๋ฐ Flow๋ ํจ์จ์ ์ด๊ณ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ธ์ํ๋ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ด์ฐฐ ๊ฐ๋ฅํ ๊ตฌ์กฐ์ ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก iOS์์์ Swift ๋ฐ SwiftUI ๊ฐ๋ฐ์ Observable์ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๊ณ ๊ธ, ์ ์ธ์ ๋ฐ ๋ฐ์ํ ์๋ฃจ์ ์ ์ ๊ณตํ๋ Combine ํ๋ ์์ํฌ์ ๊ธฐ๋ฅ์ ํ์ฉํฉ๋๋ค.
Observable์ ์ค์ฌ์๋ ์ํํธ์จ์ด ์ค๊ณ์์ ํ๋ฆฝ๋ Observer ํจํด์ ํ์ฅํ Observable ํจํด์ด ์์ต๋๋ค. Observable์ ์ด๋ฒคํธ๋ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ๊ฐ์ฒด(์์ฐ์)๋ฅผ ํด๋น ์ด๋ฒคํธ๋ ๋ฐ์ดํฐ๋ฅผ ์๋นํ๊ณ ๋ฐ์ํ๋ ๊ฐ์ฒด(์๋น์)์์ ๋ถ๋ฆฌํฉ๋๋ค. ์ด๋ฌํ ๋ถ๋ฆฌ๋ฅผ ํตํด ๊ฐ ๊ตฌ์ฑ ์์๋ ์ ์ฐํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ํต์ ๋ฉ์ปค๋์ฆ์ ๊ตฌ์ถํ๋ฉด์ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐ์ ํ ์ ์์ต๋๋ค. Observable์ ๊ฒ์-๊ตฌ๋ (pub-sub) ๋ฐ ๋ฐ๋ณต์ ํจํด์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ์๋น์๊ฐ ์์ฐ์์ ์ด๋ฒคํธ ๋๋ ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ๋ฅผ ๊ตฌ๋ ํ๊ณ , ์๋ฆผ์ ๋ฐ๊ณ , ๊ทธ์ ๋ฐ๋ผ ์ฒ๋ฆฌํ ์ ์๋๋ก ํฉ๋๋ค.
Observable ํจํด์ ์ผ๋ฐ์ ์ผ๋ก Observable, Observer ๋ฐ Subscription์ ์ธ ๊ฐ์ง ์ฃผ์ ํ๋ ์ด์ด๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. Observable์ ๋ฐ์ดํฐ๋ ์ด๋ฒคํธ์ ์์ค๋ฅผ ๋ํ๋ ๋๋ค. Observer๋ Observable์ด ๊ฐ, ์ค๋ฅ ๋๋ ์๋ฃ ์ ํธ๋ฅผ ๋ด๋ณด๋ผ ๋ ์คํ๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ ์ํ๋ ๊ฐ์ฒด์ ๋๋ค. ๊ตฌ๋ ์ Observable๊ณผ ํด๋น Observer ์ฌ์ด์ ์ค์ ๋ ์ฐ๊ฒฐ์ ๋๋ค. ๊ฐ๋ฐ์๋ ํ์์ ๋ฐ๋ผ ๊ด์ฐฐ์๋ฅผ ๊ตฌ๋ ๋ฐ ๊ตฌ๋ ์ทจ์ํ์ฌ ๊ตฌ๋ ์ ๊ด๋ฆฌํ๊ณ ๋ฐ์ดํฐ ํ๋ฆ์ ๋ํ ์ธ๋ฐํ ์ ์ด๋ฅผ ์ ๊ณตํ๊ณ ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐ ์์น ์๋ ๋ถ์์ฉ์ ๋ฐฉ์งํฉ๋๋ค.
๋ชจ๋ฐ์ผ ์ฑ ๊ฐ๋ฐ ํ๋ก์ธ์ค์์ Observable์ ์๋ฒ์์ ๋ฐ์ดํฐ ๋ค์ด๋ก๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ, ์ฌ์ฉ์ ์ ๋ ฅ ์ฒ๋ฆฌ ๋๋ ์ธ๋ถ API์์ ์ํธ ์์ฉ๊ณผ ๊ฐ์ ๋ณต์กํ ๋น๋๊ธฐ ์์ ์ ์ฒ๋ฆฌํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ์ค์๊ฐ์ผ๋ก ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ๋ฐ์ํ๊ณ ํ์์ ๋ฐ๋ผ UI ๊ตฌ์ฑ ์์๋ฅผ ์ ๋ฐ์ดํธํ์ฌ ์ํํ๊ณ ๋ฐ์์ด ๋น ๋ฅธ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ณด์ฅํฉ๋๋ค. ๋ํ Observable์ ์ฌ๋ฌ ์๋น์ ๊ฐ์ ์ฝ๊ฒ ๊ตฌ์ฑ, ๋ณํ ๋ฐ ๊ณต์ ๋ ์ ์์ผ๋ฏ๋ก ๋ณต์กํ๊ณ ๋์์ ์ธ ๋ฐ์ดํฐ ํ๋ฆ์ ๋จ์ํํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ๋ ๋ชจ๋ํํ๊ณ ์ฝ๊ธฐ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
Observable์ ์ ์ฌ๋ ฅ์ ํ์ฉํ๋ ๊ฐ๋ ฅํ ๋ฐฉ๋ฒ ์ค ํ๋๋ Android์ RxJava ๋๋ iOS์ RxSwift์ ๊ฐ์ Reactive Extensions(Rx) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ๋๋ค. ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Observable ์์ ์ ๋ณด๋ค ์ ์ฐฝํ๊ณ ํจ๊ณผ์ ์ผ๋ก ์ํํ ์ ์๋๋ก ๋ค์ํ ์ฐ์ฐ์, ์ค์ผ์ค๋ฌ ๋ฐ ๊ธฐํ ๋๊ตฌ ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. Rx๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๋ ์๋ก ๋ค๋ฅธ ์ค๋ ๋ ์ปจํ ์คํธ ๊ฐ์ ์ฝ๊ฒ ์ ํํ๊ณ , ์ฌ๋ฌ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ๊ฒฐํฉ ๋ฐ ์กฐ์ํ๊ณ , ๊ตฌ์ฑ ๊ฐ๋ฅํ๊ณ ์ ์ธ์ ์ธ ๋ฐฉ์์ผ๋ก ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
AppMaster ํ๋ซํผ์์ Observable์ ์ฌ์ฉ์ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํ๊ณ ์ฑ์ ๋์ฑ ๊ฐ๋ ฅํ๊ณ ๋ฐ์์ ์ผ๋ก ๋ง๋๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. AppMaster ํ๋ ์์ํฌ์ ๊ฐ์ ์๋ฒ ๊ธฐ๋ฐ ์๋ฃจ์ ์ ํตํด ๊ด์ฐฐ ๊ฐ๋ฅ ํญ๋ชฉ๊ณผ ๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ ์ ํตํฉํจ์ผ๋ก์จ ํ๋ซํผ์ App Store ๋ฐ Play Market์ ์ ๋ฒ์ ์ ์ ์ถํ ํ์ ์์ด ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ UI, ๋ก์ง ๋ฐ API ํค๋ฅผ ์ํํ๊ฒ ์ ๋ฐ์ดํธํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ด ํ๋ซํผ์ ๊ธฐ์ ์ ์ธ ์ง์์ด ์๋ ์ฌ์ฉ์๋ผ๋ ๊ฐ๋ฐฉํ API ๋ฌธ์ ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง ๋ง์ด๊ทธ๋ ์ด์ ์คํฌ๋ฆฝํธ๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ Observable์ ์ฌ์ฉํ์ฌ ๋ณต์กํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ์ํํธ์จ์ด ์๋ฃจ์ ์ ๊ตฌ์ถํ ์ ์๋๋ก ๋ณด์ฅํ์ฌ ๋ชจ๋ ๋ฒ์, ๋ณต์ก์ฑ ๋ฐ ๊ท๋ชจ์ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๋ค์ฉ๋์ ๋ฏธ๋ ๋ณด์ฅํ ์ํคํ ์ฒ๋ฅผ ์ ๊ณตํฉ๋๋ค. .