RIBs๋ ์ฐ๋ฒ์์ ๋ง๋ ์ํคํ ์ณ์ ๋๋ค.
์ฌ์ค ์๋ ์ ํํ ๋ฆฌ์ผ 1์ ์กฐ๊ธ ๋ฐ๋ผํด๋ณด๊ธดํ๋๋ฐ .. ๋๊ฒ ๋ณต์ก๋ณต์กํ๋ ๊ธฐ์ต๋ง ๋จ์์๋๊ฑฐ ๊ฐ์์ ...
๊ทธ๋์ RIBs๋ฅผ ์ด๋ฃจ๋ ๊ธฐ๋ณธ ๊ฐ๋ ์ ๋ํด ํํ ๋ฆฌ์ผ2๊น์ง ๋ณด์๊ฒ ๋ค ๋ค์ํ๋ฒ ์ ๋ฆฌ ํด๋ณด๋ ค๊ณ ํฉ๋๋ค ์ด๋ฒ์ ํ๋ก์ ํธ๋ ๊ผญ ์ ์ฉํด๋ณด๋ ค๊ตฌ์ !!
What are RIBs For?
RIBs๋ ์ฐ๋ฒ์ ํฌ๋ก์ค ํ๋ซํผ ์ํคํ ์ณ ํ๋ ์์ํฌ์ ๋๋ค. RIBs๋ ๋ง์ด ์ฝํ์๋ state๋ฅผ ํฌํจํ๊ณ ์๋ ํฐ ๋ชจ๋ฐ์ผ ์ฑ์ ์ํด ๋์์ธ ๋์์ต๋๋ค.
์ฐ๋ฒ๋ฅผ ์ํ ์ด ํ๋ ์์ํฌ๋ฅผ ๋์์ธ ํ ๋ ์๋ฆฌ ์์น์ ์ค์ํ๊ณ ์ ํ์์ต๋๋ค.
Encourage Cross-Platform Collaboration :
์ฐ๋ฆฌ ์ฑ์ ๋ณต์กํ ๋ถ๋ถ์ ๋๋ถ๋ถ iOS์ Android์์ ๋น์ทํฉ๋๋ค. RIBs๋ Android์ iOS๋ฅผ ์ํ ๋น์ทํ ๊ฐ๋ฐ ํจํด์ ๋ณด์ ๋๋ค. RIBs๋ฅผ ์ฌ์ฉํจ์ผ๋ก์ iOS ๋ฐ Android ํ๋ซํผ์ ์์ง๋์ด๋ ๊ธฐ๋ฅ์ ๋ํด ๊ณต๋์ผ๋ก ์ค๊ณ๋ ๋จ์ผ ์ํคํ ์ฒ๋ฅผ ๊ณต์ ํ ์ ์์ต๋๋ค.
Minimize Global States and Decisions:
Global state ๋ณํ๋ ์์ธกํ ์ ์๋ ํ๋์ ๋ง๋ค๊ณ ๋ณํ์ ๋ํ ์ ์ฒด์ ์ํฅ์ ์์ง ๋ชปํ๊ฒ ๋ง๋ญ๋๋ค. RIBs๋ ๊ฐ RIBs์ ๊ณ ๋ฆฝ๋ ๊น์ ๊ณ์ธต๊ตฌ์กฐ ๋ด์์ state๋ฅผ ์บก์ํํ์ฌ global state ์ด์๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
Testability and Isolation:
ํด๋์ค๋ ๋จ์ ํ ์คํธ๊ฐ ์ฌ์์ผ ํ๊ณ ๊ฒฉ๋ฆฌ(isolation)์ ๋ํด ์ถ๋ก ํด์ผ ํฉ๋๋ค. ๊ฐ RIBs ํด๋์ค๋ ๊ตฌ๋ณ๋ ์ฑ ์์ ๊ฐ์ง๋๋ค. (i.e. routing, business logic, view logic, creation of other RIB classes) ์ถ๊ฐ๋ก parent RIB ๋ก์ง์ child RIB ๋ก์ง์ผ๋ก๋ถํฐ ๋ถ๋ฆฌ๋์ด ์ง๋๋ค. ์ด๊ฒ์ RIB ํด๋์ค๊ฐ ํ ์คํธ ํ๊ธฐ ์ฝ๊ณ ์์กด์ ์ด์ง ์๊ฒ ๋ง๋ค๊ฒ ํ๋๋ฐ ์ฉ์ดํฉ๋๋ค.
Tooling for Developer Productivity :
์ค์ํ์ง ์์ ์ํคํ ์ฒ ํจํด์ ์ฑํํ๋ ๊ฒ์ ๊ฐ๋ ฅํ ๋๊ตฌ ์์ด๋ ์๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ด์์ผ๋ก ํ์ฅ๋์ง ์์ต๋๋ค. RIB๋ ์ฝ๋ ์์ฑ, ์ ์ ๋ถ์ ๋ฐ ๋ฐํ์ ํตํฉ๊ณผ ๊ด๋ จ๋ IDE ๋๊ตฌ์ ํจ๊ป ์ ๊ณต๋๋ฉฐ, ์ด ๋ชจ๋๋ ํฌ๊ณ ์์ ํ์ ๊ฐ๋ฐ์ ์์ฐ์ฑ์ ํฅ์์ํต๋๋ค.
Structured around Business Logic :
์ฑ์ ๋น์ง๋์ค ๋ก์ง ๊ตฌ์กฐ๋ UI์ ๊ตฌ์กฐ๋ฅผ ์๊ฒฉํ๊ฒ ๋ฐ์ํ ํ์๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, animation๊ณผ view performance๋ฅผ ์ฉ์ดํ๊ฒ ํ๊ธฐ ์ํด view ๊ณ์ธต ๊ตฌ์กฐ๋ RIB ๊ณ์ธต ๊ตฌ์กฐ๋ณด๋ค ์์ ์ ์์ต๋๋ค. ๋๋ ํ๋์ RIB์ UI ๋ด์ ๋ค๋ฅธ ์์น์ ๋ํ๋๋ ์ธ ๊ฐ์ง view์ ๋ชจ์์ ์ ์ดํ ์ ์์ต๋๋ค.
Explicit Contracts :
์๊ตฌ ์ฌํญ์ ์ปดํ์ผ ์๊ฐ์ ์์ ํ contract์ผ๋ก ์ ์ธ๋์ด์ผ ํฉ๋๋ค. ํด๋์ค ์ข ์์ฑ๊ณผ ์์ ์ข ์์ฑ์ด ์ถฉ์กฑ๋์ง ์์ผ๋ฉด ํด๋์ค๊ฐ ์ปดํ์ผ๋์ง ์์์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์ ์์ ์ข ์์ฑ์ ๋ํ๋ด๊ธฐ ์ํด ReactiveX๋ฅผ ์ฌ์ฉํฉ๋๋ค. type ์์ ์ข ์์ฑ ์ฃผ์ (DI) ์์คํ ์ ์ฌ์ฉํ์ฌ ํด๋์ค ์ข ์์ฑ์ ๋ํ๋ด๊ณ , ๋ง์ DI ๋ฒ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๋ถ๋ณ์ฑ ์์ฑ์ ๊ถ์ฅํฉ๋๋ค.
Parts of a RIB
์์ ์ VIPER ์ํคํ ์ณ์ ๋ํด ๊ณต๋ถํ๋ค๋ฉด, RIB์ ํด๋์ค ๋ถ์์ด ์น์ํด ๋ณด์ผ ๊ฒ์ ๋๋ค. RIB๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ ์์๋ก ๊ตฌ์ฑ๋๋ฉฐ ๋ชจ๋ ์์๋ ์์ฒด ํด๋์ค์์ ๊ตฌํ๋ฉ๋๋ค.
Interactor
๋น์ง๋์ค ๋ก์ง์ ๊ฐ์ง๊ณ ์์ต๋๋ค. Rx subscription์ ์ํํ๊ณ , state-altering decision์ ๋ง๋ค๊ณ ๋ฐ์ดํฐ๋ฅผ ์ด๋์ ์ ์ฅํ ์ง ๊ฒฐ์ ํ๊ณ ๋ค๋ฅธ RIBs๋ค์ ์์์ผ๋ก ๊ฐ์ง๊ณ ์์ด์ผ ํ๋์ง ๊ฒฐ์ ํฉ๋๋ค.
Interactor์ ์ํด ์ํ๋๋ ๋ชจ๋ operation์ lifecycle์ ๊ตญํ๋์ด์ผ ํฉ๋๋ค. Interactor๊ฐ ํ์ฑํ๋ ๊ฒฝ์ฐ์๋ง ๋น์ฆ๋์ค ๋ก์ง์ด ์คํ๋๋๋ก ๋๊ตฌ๋ฅผ ๊ตฌ์ถํ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ Interator๊ฐ ํ์ฑํ๋์ง ์์์ง๋ง subscription์ ์์น ์์ ๋น์ง๋์ค ๋ก์ง์ด๋ UI ์ํ๋ฅผ ์ ๋ฐ์ดํธ ํ๋ ๊ฒ์ ๋ง์ต๋๋ค.
Router
Interactor๋ฅผ listenํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฌผ์ ์์ RIBs์ ๊ฐ์ง๊ณ ๋ผ๋(detach) ์์ ์ ํฉ๋๋ค. Router๋ ์๋ 3๊ฐ์ง ์ด์ ๋ก ์กด์ฌํฉ๋๋ค.
1. router๋ Humble Object์ฒ๋ผ ํ๋ํ๋ค. ๊ทธ๊ฒ์ ํ ์คํธ ๋ณต์กํ Interactor ๋ก์ง์ child interactor๋ฅผ mockํ๊ฑฐ๋ ๋ค๋ฅธ care๋ฅผ ํ์ํ์ง ์๊ฒ ํ๋ฉด์ ํ ์คํธํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด์ค๋ค.
2. router๋ parent interactor์ ๊ทธ child interactor ์ฌ์ด ์ถ์ํ๋ ๊ณ์ธต์ ๋ง๋ ๋ค. ์ด๊ฒ์ Interactors ๊ฐ์ ๋๊ธฐ์ ํต์ ์ ์กฐ๊ธ ๋ ์ด๋ ต๊ฒ ๋ง๋ค๊ณ RIB ๊ฐ์ ์ง์ ์ฐ๊ฒฐ ๋์ ๋ฐ์ํ ํต์ ์ ์ฑํ์ ๊ฒฉ๋ คํ๋ค.
3. Interactor์ ์ํด ๊ตฌํ๋๋ ๋จ์ํ๊ณ ๋ฐ๋ณต์ ์ธ ๋ผ์ฐํ
๋ก์ง์ ํฌํจํ๊ณ ์๋ค. ์ด๊ฒ์ Interactor๋ฅผ ์๊ฒ ์ ์งํ๊ณ RIB์์ ์ ๊ณตํ๋ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ๋ ์ง์คํ๋ ๋ฐ ๋์์ ์ค๋ค.
Builder
Builder์ ์ฑ
์์ ๋ชจ๋ RIB์ ๊ตฌ์ฑ ํด๋์ค์ ๊ฐ RIB์ ์์์ ๋ํ ๋น๋๋ฅผ ์ธ์คํด์คํํ๋ ๊ฒ์
๋๋ค.
Builder์์์ ํด๋์ค์ ์์ฑ ๋ก์ง์ ๋ถ๋ฆฌํ๋ ๊ฒ์ iOS์ mockability๋ฅผ ์ง์ํ๊ณ ๋๋จธ์ง RIB ์ฝ๋๋ค์ DI ๊ตฌํ์ ์ธ๋ถ ์ฌํญ์ ๋ฌด๊ด์ฌํ๊ฒ ๋ง๋ญ๋๋ค. builder๋ ์ค์ง RIB์ ์ผ๋ถ๋ถ์ผ๋ก ํ๋ก์ ํธ์์ ์ฐ์ด๋ DI ์์คํ
์ ๋ํด ์๊ณ ์์ด์ผ ํฉ๋๋ค.
๋ค๋ฅธ builder๋ฅผ ๊ตฌํํจ์ผ๋ก์ ๋ค๋ฅธ DI ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํด ํ๋ก์ ํธ์์ ๋๋จธ์ง RIB ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉ ํ ์ ์๊ฒ ๋ฉ๋๋ค.
Presenter
๋น์ง๋์ค ๋ชจ๋ธ์ ๋ทฐ๋ชจ๋ธ๋ก ๋๋ ๋ทฐ๋ชจ๋ธ์ ๋น์ง๋์ค ๋ชจ๋ธ๋ก ๋ณํํ๋ ์ํ ์๋(stateless) ํด๋์ค์ ๋๋ค. ๋ทฐ๋ชจ๋ธ ๋ณํ ํ ์คํธ๋ฅผ ์ฉ์ดํ๊ฒ ํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ํ์ง๋ง ์ด๋ฐ ๋ณํ์ ์์ฃผ ํ์ฐฎ์๋ฐ ์ด๊ฒ์ dedicated presenter ํด๋์ค์ ์์ฑ์ ๋ณด์ฅํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. presenter๊ฐ ์๋ต๋๋ฉด ๋ทฐ๋ชจ๋ธ์ ๋ณํํ๋ ๊ฒ์ view ๋๋ interactor์ ์ฑ ์์ด ๋ ์ ์์ต๋๋ค.
View(Controller)
view๋ UI๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ๋น๋ํฉ๋๋ค. UI ์ปดํฌ๋ํธ๋ฅผ ์ธ์คํด์คํ, ๋ ์ด์์, ์ฌ์ฉ์ ์ธํฐ๋์ ํธ๋ค๋ง, ๋ฐ์ดํฐ์ animation๊ณผ ํจ๊ป UI ์ปดํฌ๋ํธ ์ฑ์ฐ๊ธฐ ๋ฑ์ ํฌํจํฉ๋๋ค. View๋ ๊ฐ๋ฅํ dumbํ๊ฒ ๋์์ธ ๋์ด์ง๋๋ฐ, ์ค์ง information์ ๋ณด์ฌ์ค๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ ๋ํ ์คํธ ๋์ด์ง ํ์๊ฐ ์๋ ์ฝ๋๋ค์ ํฌํจํ์ง ์์ต๋๋ค.
Component
RIB์ dependencies๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. ๋น๋๊ฐ RIB๋ฅผ ๊ตฌ์ฑํ๋ ๋ค๋ฅธ ๋จ์๋ฅผ ์ธ์คํด์คํํ๋ ๋ฐ ๋์์ ์ค๋๋ค. RIB๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ํ์ํ ์ธ๋ถ ์ข ์์ฑ์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ๊ณตํ ๋ฟ๋ง ์๋๋ผ RIB ์์ฒด์ ์ํด ์์ฑ๋ ์ข ์์ฑ์ ์์ ํ๊ณ ๋ค๋ฅธ RIB์์ ์ด์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ์ดํฉ๋๋ค. ๋ถ๋ชจ RIB์ ๊ตฌ์ฑ ์์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ถ๋ชจ RIB์ ์ข ์์ฑ์ ๋ํ ์์ ์ก์ธ์ค๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์์ RIB์ ๋น๋์ ์ฃผ์ ๋ฉ๋๋ค.
'IOS๐ > ์ํคํ ์ณ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ํคํ ์ณ] ReactorKit์ด๋ (0) | 2022.04.24 |
---|---|
[์ํคํ ์ณ] MVP ๋ (0) | 2022.01.06 |
[์ํคํ ์ณ] MVVM (clean-architecture) ์ด๋ (0) | 2021.12.22 |
[์ํคํ ์ณ] Viper ๋ (0) | 2021.11.29 |
[์ํคํ ์ณ] RiBs tutorial1 ๋ฐ๋ผํ๊ธฐ (0) | 2021.11.13 |
๋๊ธ