๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽ iOS/Architecture

[Design Pattern] RIBs๋ž€?(feat. Uber)

by Fomagran ๐Ÿ’ป 2021. 8. 18.
728x90
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š” 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๊ฐ€ ์žˆ๋Š”๋ฐ์š”.

 

์ด์ œ๋ถ€ํ„ฐ ํ•˜๋‚˜ ํ•˜๋‚˜ ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์ถœ์ฒ˜: https://github.com/uber/RIBs/wiki

 

 

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 ์•„ํ‚คํ…์ฒ˜ ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜๋Š”๋ฐ์š”.

 

์‚ฌ์‹ค ๊ธ€์„ ์ž‘์„ฑํ•˜๋ฉด์„œ๋„ ์ž˜ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค...

 

์ด๋ก  ์ž์ฒด๋„ ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ€๋Š”๋ฐ... ์ด๊ฑธ๋กœ ๊ตฌํ˜„์„ ํ•˜๋ ค๋ฉด ์–ผ๋งˆ๋‚˜ ๋” ๋ณต์žกํ• ์ง€..

 

๋‹ค์Œ ํฌ์ŠคํŒ…์€ ํŠœํ† ๋ฆฌ์–ผ๋กœ ๋Œ์•„์˜ค๊ฒ ์Šต๋‹ˆ๋‹ค!

 

ํ˜น์‹œ๋ผ๋„ ํ‹€๋ฆฐ ์ ์ด๋‚˜ ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ์œผ๋ฉด ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์„ธ์š”!


ํŠœํ† ๋ฆฌ์–ผ

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€