์๋ ํ์ธ์ Foma๐ ์ ๋๋ค!
์ค๋์ Uber์์ ๋ง๋ ํ๋ ์์ํฌ์ธ RIBs์ ๋ํด์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
iOS๊ณ์์ ์์ฃผ ๊ณ ์์ด์ '๋ฏผ์๋ค'๋๋ ์ฌ๋ฌ ๋์์ธ ํจํด์ ๊ฑฐ์ณ์ RIBs์ ์ ์ฐฉํ๊ฒ ๋์๋ค๊ณ ํ๊ณ
๋ ๋ง์ ํ์ฌ์์ RIBs ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๊ณ ์๋๋ผ๊ตฌ์.
๊ทธ๋์ ์ด๋ค ์ ์ด ์ฅ์ ์ด๊ณ ๋ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง์ ๋ํด์ ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค!
๋ฐ๋ก ์์ํ ๊ฒ์~
RIBs๋?
๊ณต์ ๊นํ์์ ์ด๋ ๊ฒ ์๊ฐํฉ๋๋ค.
RIBs๋ Uber์ ๋ชจ๋ฐ์ผ ํฌ๋ก์ค ํ๋ซํผ ์ํคํ ์ฒ ํ๋ ์์ํฌ์ ๋๋ค. RIB์ด๋ผ๋ ์ด๋ฆ์ ์ด ์ํคํ ์ฒ์ ํต์ฌ ๊ตฌ์ฑ ์์์ธ Router, Interactor ๋ฐ Builder์ ์ฝ์ด์ ๋๋ค. ์ด ํ๋ ์์ํฌ๋ ๋ง์ ์์ ์์ง๋์ด์ ์ค์ฒฉ ์ํ๊ฐ ์๋ ๋ชจ๋ฐ์ผ ์ฑ์ ์ํด ์ค๊ณ๋์์ต๋๋ค.
์ ๊ณต
RIBs ์ํคํ ์ฒ๋ ์๋ 4๊ฐ์ง ํน์ง์ ์ ๊ณตํฉ๋๋ค.
- ๊ณต์ ์ํคํ ์ฒ ์ ์ฌํ ์ํคํ ์ฒ๋ฅผ ๊ฐ์ง ํ๋ซํผ ๊ฐ ์ฑ์ ๋น๋ํ์ฌ iOS ๋ฐ Android ํ์ด ๋น์ฆ๋์ค ๋ก์ง ์ฝ๋๋ฅผ ๊ต์ฐจ ๊ฒํ ํ ์ ์๋๋ก ํฉ๋๋ค.
- ํ ์คํธ ๊ฐ๋ฅ์ฑ ํด๋์ค๋ ๋จ์ ํ ์คํธ๊ฐ ์ฌ์์ผ ํ๊ณ ๊ฐ๋ณ์ ์ผ๋ก ์ถ๋ก ํด์ผ ํฉ๋๋ค. ๊ฐ๋ณ RIB ํด๋์ค์๋ ๋ผ์ฐํ , ๋น์ฆ๋์ค, ๋ทฐ ๋ก์ง, ์์ฑ๊ณผ ๊ฐ์ ๊ณ ์ ํ ์ฑ ์์ด ์์ต๋๋ค. ๋ํ ๋๋ถ๋ถ์ RIB ๋ ผ๋ฆฌ๋ ์์ RIB ๋ ผ๋ฆฌ์์ ๋ถ๋ฆฌ๋ฉ๋๋ค. ๋ฐ๋ผ์ RIB ํด๋์ค๋ฅผ ์ฝ๊ฒ ํ ์คํธํ๊ณ ๋ ๋ฆฝ์ ์ผ๋ก ์ถ๋ก ํ ์ ์์ต๋๋ค.
- ๊ฐ๋ฐ ์์ฐ์ฑ RIB๋ ์ฝ๋ ์์ฑ, ๋ฉ๋ชจ๋ฆฌ ๋์ ๊ฐ์ง, ์ ์ ๋ถ์ ๋ฐ ๋ฐํ์ ํตํฉ๊ณผ ๊ด๋ จ๋ IDE ๋๊ตฌ์ ํจ๊ป ์ ๊ณต๋๋ฉฐ, ์ด ๋ชจ๋๋ ๋๊ท๋ชจ ํ ๋๋ ์๊ท๋ชจ ํ์ ๊ฐ๋ฐ์ ์์ฐ์ฑ์ ํฅ์์ํต๋๋ค.
- ํ์ฅ ๊ฐ๋ฅํ ์ํคํ ์ฒ ์ด ์ํคํ ์ฒ๋ ์๋ฐฑ ๊ฐ์ RIB๊ฐ ์๋ ๋์ผํ ์ฝ๋๋ฒ ์ด์ค ๋ฐ ์ฑ์์ ์์ ํ๋ ์๋ฐฑ ๋ช ์ ์์ง๋์ด๋ก ํ์ฅ๋๋ ๊ฒ์ผ๋ก ์ ์ฆ๋์์ต๋๋ค.
๋ค๋ฅธ ๋์์ธ ํจํด๊ณผ์ ์ฐจ์ด์
RIBs๋ MVC,MVP,MVVM,VIPER์ ๊ฐ์ ๋์์ธ ํจํด์ด ์๋๋ผ ํ๋ ์์ํฌ์ ๋๋ค.
๋ค๋ฅธ ๋์์ธ ํจํด๊ณผ ๋ฌ๋ฆฌ RIB์ View๊ฐ ํ์ํ์ง ์์ต๋๋ค.
์ด๊ฒ์ ์ฑ ๊ณ์ธต ๊ตฌ์กฐ๊ฐ ๋ทฐ ํธ๋ฆฌ๊ฐ ์๋ ๋น์ง๋์ค ๋ก์ง์ ์ํด ๊ตฌ๋๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
RIB์ ๋น์ฆ๋์ค ๋ก์ง ๋ฒ์๊ฐ ๋ทฐ ๊ณ์ธต ๊ตฌ์กฐ์์ ์ด๋ป๊ฒ ๊ตฌ์ฑ๋๋์ง๋ฅผ ๋ถ๋ฆฌํฉ๋๋ค.
์ด๋ฅผ ํตํด์ ์ฑ์ ๋ ์ด์์,์ ๋๋ฉ์ด์ ๋ฐ ์ ํ์ ์ฝ๊ฒ ๋ง๋๋ ์์ ๋ทฐ ๊ณ์ธต์ ์ ์งํ๋ฉด์
๊น์ ๋น์ง๋์ค ๋ก์ง ํธ๋ฆฌ๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
๊ตฌ์ฑ์์
ํ์ง๋ง ์ง์ง R.I.B๋ก๋ง ์ด๋ค์ง ๊ฑด ์๋๋๋ค.
์๋์ ๊ฐ์ด Router Interactor Builder ๋ฟ๋ง ์๋๋ผ Presenter,View,Component๊ฐ ์๋๋ฐ์.
์ด์ ๋ถํฐ ํ๋ ํ๋ ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค.
Router
๋ผ์ฐํฐ๋ ์ธํฐ๋ํฐ๋ฅผ ๋ฃ๊ณ ๊ทธ์ ๋ํ ๋ฐ์์ ์์ RIB์ ์ฐ๊ฒฐํ๊ฑฐ๋ ๋ถ๋ฆฌ๋ฅผ ๋ณํํฉ๋๋ค.
๋ผ์ฐํฐ๊ฐ ์กด์ฌํ๋ ์ด์
1. ํ์ ์ธํฐ๋ํฐ๋ฅผ ์ ๊ฒฝ์ฐ์ง ์๊ณ ๋ณต์กํ ์ธํฐ๋ํฐ์ ๋ก์ง์ ํ ์คํธํ ์ ์๋๋ก ํฉ๋๋ค.
2. ๋ถ๋ชจ ์ธํฐ๋ํฐ์ ์์ ์ธํฐ๋ํฐ์ ์ง์ ๊ฒฐํฉ ๋์ ๋ฐ์ํ ํต์ ์ ์ฑํ์ ๊ถ์ฅํ ์ ์๋๋ก ํฉ๋๋ค.
3. ์ธํฐ๋ํฐ์ ์ํด ๊ตฌํ๋๋ ๋ผ์ฐํ ๋ก์ง์ ํฌํจํด ์ธํฐ๋ํฐ๋ฅผ ์๊ฒ ์ ์งํฉ๋๋ค.
Interactor
์ธํฐ๋ํฐ๋ ๋น์ง๋์ค ๋ก์ง์ ํฌํจํฉ๋๋ค.
Rx๊ตฌ๋ ,์ํ ๋ณ๊ฒฝ,๋ฐ์ดํฐ ์ ์ฅ ์์น,์์ RIB ๋ฑ์ ๊ฒฐ์ ํฉ๋๋ค.
์ธํฐ๋ํฐ๊ฐ ์ํํ๋ ๋ชจ๋ ์์ ์ ํด๋น ์๋ช ์ฃผ๊ธฐ๋ก ์ ํํด ๋น์ง๋์ค ๋ ผ๋ฆฌ ๋๋ UI ์ํ์ ๋ํ ์์น ์๋ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
Builder
๋ชจ๋ RIB์ ๊ตฌ์ฑ ํด๋์ค์ ๊ฐ RIB ์์์ ๋ํ ๋น๋๋ฅผ ์ธ์คํด์คํ ํฉ๋๋ค.
๋น๋๋ฅผ ํตํด์ ๋ก์ง์ ๋ถ๋ฆฌํ๋ฉด ๋๋จธ์ง RIB ์ฝ๋๋ DI ๊ตฌํ ์ฌํญ์ ์ ๊ฒฝ์ฐ์ง ์๊ฒ ๋ฉ๋๋ค.
์ด๋ ๊ฒ ๋๋ฉด ํ๋ก์ ํธ์ ๋๋จธ์ง RIB ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค.
Presenter
๋ชจ๋ธ์ ๋ทฐ๋ชจ๋ธ๋ก ๋ทฐ๋ชจ๋ธ์ ๋ชจ๋ธ๋ก ๋ณํํ๋ ์ํ ๋น์ ์ฅ ํด๋์ค์ ๋๋ค.
ํ๋ ์ ํฐ๋ RIB์ ๋ง๋ค ๋ ์ต์ ๋๋ก ๋ง๋ค์ด๋ ๋๊ณ ๋ง๋ค์ง ์์๋ ๋ฉ๋๋ค.
๋ง์ฝ ํ๋ ์ ํฐ๊ฐ ์๋ต๋๋ฉด ๋ทฐ๋ชจ๋ธ ์ ํ์ ๋ทฐ ๋๋ ์ธํฐ๋์ ์ฑ ์์ด ๋ฉ๋๋ค.
View
๋ทฐ๋ UI๋ฅผ ๋น๋ํ๊ณ ์ ๋ฐ์ดํธ ํฉ๋๋ค.
์ด๊ฒ๋ ํ๋ ์ ํฐ์ ๊ฐ์ด ์ต์ ๋๋ก ๋ฐ๋์ ํ์ํ ๊ฒ์ ์๋๋๋ค.
Component
์ปดํฌ๋ํธ๋ ๋น๋๊ฐ RIB์๊ตฌ์ฑํ๋ ๋ค๋ฅธ ๋จ์๋ฅผ ์ธ์คํด์คํ ํ๋๋ก ์ง์ํฉ๋๋ค.
RIB์ ๊ตฌ์ถํ๋๋ฐ ํ์ํ ์ธ๋ถ ์ข ์์ฑ์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ๊ณตํ๊ณ ์ ์ดํฉ๋๋ค.
์ํ๊ด๋ฆฌ
RIB์ ์ํ๊ด๋ฆฌ๋ ์๋ GIF๋ก ์ค๋ช ํ ์ ์์ต๋๋ค.
Step 1. ์ ์ ๊ฐ ๋ก๊ทธ์์ ํ์ ๋ ์จ๋ณด๋ฉ RIB์ด ๋ถ์ฌ์ง๋๋ค.
Step 2. ์ ์ ๊ฐ ๋ก๊ทธ์ธ ํ๋ฉด ์จ๋ณด๋ฉ RIB์ด ๋ผ์ด์ง๊ณ Request,Shortcuts RIB์ด ๋ถ์ฌ์ง๋๋ค.
Step 3. ์ ์ ๊ฐ Shortcuts๋ฅผ ์ฌ์ฉํ๋ฉด Comfirmation RIB์ด ๋ถ์ฌ์ง๋๋ค.
...
RIB ๊ฐ ํต์
์ธํฐ๋ํฐ๊ฐ ์ด๋ ํ ๋น์ง๋์ค ๋ก์ง ๊ฒฐ์ ์ ๋ด๋ฆด ๋ ์๋ฃ์ ๊ฐ์ ์ด๋ฒคํธ๋ฅผ ๋ค๋ฅธ RIB์ ์๋ฆฌ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ผ ํฉ๋๋ค.
RIB๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ ๋จ์ผ ๋ฐฉ๋ฒ์ ์์ง ์์ผ๋ ํ์ RIB์ผ๋ก ๋ด๋ ค๊ฐ๋ฉด Rx ์คํธ๋ฆผ ๋ฐฉ์ถ๋ก ์ ๋ฌํฉ๋๋ค.
๋๋ ๋ฐ์ดํฐ๊ฐ ์์ RIB์ build() ๋ฉ์๋์ ๋งค๊ฐ๋ณ์๋ก ํฌํจ๋ ์๋ ์์ต๋๋ค.
๋ฆฌ์ค๋ ์ธํฐํ์ด์ค๋ฅผ ํตํด ํต์ ์ด ์ํ๋ฉ๋๋ค.
์ด๊ฒ์ ๋ถ๋ชจ๊ฐ ์์์ Rx ์คํธ๋ฆผ์ ์ง์ ๊ตฌ๋ ํ๋ ๋์ ๋ถ๋ชจ RIB์์ ๋ฆฌ์ค๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์์ RIB๊ฐ ํธ์ถ๋ ์ ์๋๋ก
๋ฆฌ์ค๋ ์ธํฐํ์ด์ค๋ฅผ DI ๊ทธ๋ํ์ ๋ฐฐ์นํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ณ ํ ์คํธ ๋ฐ ์ ์ง ๊ด๋ฆฌ๋ฅผ ์์ํ๋๋ก ํฉ๋๋ค.
์ค๋์ ์ด๋ ๊ฒ RIBs ์ํคํ ์ฒ ํ๋ ์์ํฌ์ ๋ํด์ ์์๋ณด์๋๋ฐ์.
์ฌ์ค ๊ธ์ ์์ฑํ๋ฉด์๋ ์ ์ดํด๊ฐ ๋์ง ์์ต๋๋ค...
์ด๋ก ์์ฒด๋ ์ดํด๊ฐ ์๊ฐ๋๋ฐ... ์ด๊ฑธ๋ก ๊ตฌํ์ ํ๋ ค๋ฉด ์ผ๋ง๋ ๋ ๋ณต์กํ ์ง..
๋ค์ ํฌ์คํ ์ ํํ ๋ฆฌ์ผ๋ก ๋์์ค๊ฒ ์ต๋๋ค!
ํน์๋ผ๋ ํ๋ฆฐ ์ ์ด๋ ๊ถ๊ธํ ์ ์ด ์์ผ๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์!
ํํ ๋ฆฌ์ผ
'๐ iOS > Architecture' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[RIBs] Router๋ฅผ ์ด์ฉํด ํ๋ฉด ์ ํํด๋ณด๊ธฐ (feat. Memo) (0) | 2021.08.24 |
---|---|
[RIBs] Interactor๋ก ๋น๋์ง์ค ๋ก์ง ์ฒ๋ฆฌํด๋ณด๊ธฐ (feat. ์ด๊ธฐ์ธํ ) (0) | 2021.08.18 |
[Design Pattern] MVP ํจํด์ด๋? (0) | 2021.08.11 |
[Design Pattern] ReactorKit์ด๋? (0) | 2021.06.17 |
[Design Pattern] Apple์ MVC ํจํด์ด๋? (0) | 2021.06.03 |
๋๊ธ