λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
🍎 iOS

[Swift] RIBs Architecture κ°œμš”μ™€ ν…œν”Œλ¦Ώ μ„€μ •

by ν‹΄λ”” 2021. 11. 12.
728x90
λ°˜μ‘ν˜•

  λ·° 없이 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직만 ν•„μš”ν•œ κ²½μš°κ°€ 잘 μ—†κ³  곡식적인 ν”„λ‘œμ νŠΈμ—μ„œ μ΄λŸ¬ν•œ μ•„ν‚€ν…μ²˜λ₯Ό λ„μž…ν•˜μ§€λ„ μ•ŠκΈ° λ•Œλ¬Έμ— RIBs 을 곡뢀해야 κ² λ‹€κ³  마음먹기 κΉŒμ§€ ꡉμž₯히 였래 κ±Έλ Έλ‹€. 

  동적 ν…ŒμŠ€νŠΈμ™€ UI ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ν•˜λŠ” 것이 μ „λΆ€μ˜€λŠ”λ° μ΄λ²ˆμ— 규λͺ¨κ°€ μ’€ μžˆλŠ” ν”„λ‘œμ νŠΈλ₯Ό ν•΄λ³΄λ©΄μ„œ ν…ŒμŠ€νŠΈμ˜ μ€‘μš”μ„±μ„ κΉ¨λ‹«κΈ° μ‹œμž‘ν–ˆκ³ , 기획이 λ°”λ€” λ•Œ λ§ˆλ‹€ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직이 μ•„λ‹Œ UIκ°€ μˆ˜μ •λ˜μ–΄μ•Ό ν•˜λŠ” 상황을 λ³΄λ©΄μ„œ μ™œ μ•„ν‚€ν…μ²˜λ₯Ό λ„μž…ν•˜μ—¬ μ‚¬μš©ν•˜λŠ”μ§€ 느끼게 λ˜μ—ˆλ‹€. UIκ°€ λΉ„μ¦ˆλ‹ˆμŠ€μ™€ κΈ΄λ°€ν•  수둝 μˆ˜μ •ν•˜λŠ”λ° λ§Žμ€ μ‹œκ°„μ΄ κ±Έλ Έλ‹€.

  κ²°κ΅­ MVVC, MVVM 등을 기웃 거리닀가 RIBsλΌλŠ” μ•„ν‚€ν…μ²˜λ₯Ό μ•Œκ²Œ λ˜μ—ˆλ‹€. μš°λ²„μ—μ„œ μ œμž‘ν•œ μ•„ν‚€ν…μ²˜μ΄λ©° λ·°λ₯Ό ν•„μš”λ‘œ ν•˜μ§€ μ•ŠλŠ” λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μœ„ν•œ RIB 을 λ§Œλ“€ 수 μžˆλ‹€λŠ” 것과 ν…ŒμŠ€νŠΈμ˜ μš©μ΄μ„±μ΄λΌλŠ” 말에 λ°˜ν•΄ 곡뢀λ₯Ό μ‹œμž‘ν•΄ 보고자 ν•œλ‹€!

  곡뢀해 보고 λ‹¨μœ„ ν…ŒμŠ€νŠΈμ— 효과적이고 뷰에 쒅속적이지 μ•Šμ€ 졜고의 방법이라면 파일이 λŠ˜μ–΄λ‚˜λŠ” 단점보닀 μž₯점을 νƒν•˜κ² λ‹€λŠ” 것이 λ‚˜μ˜ 취지이닀! κ³΅λΆ€ν•΄μ„œ λ‹€λ₯Έ μ‚¬λžŒλ“€μ—κ²Œ 지식을 λ‚˜λˆŒ 수 μžˆμ—ˆμœΌλ©΄ ν•˜λŠ” λ°”λžŒλ„ μžˆλ‹€. 


- 메인 핡심은 앱이 뷰에 μ˜ν•΄μ„œκ°€ μ•„λ‹Œ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ— μ˜ν•΄μ„œ μ‹€ν–‰ν•˜κ³  λ™μž‘ν•΄μ•Ό ν•œλ‹€λŠ” 것이닀.

- RIB을 트리 ꡬ쑰둜 ν˜•μƒν™” ν•  수 μžˆλŠ”λ° RIB은 λ…Έλ“œμ΄κ³  λ…Έλ“œλŠ” ν•˜μœ„ λ…Έλ“œλ₯Ό ν•œκ°œ 이상 κ°€μ§ˆ 수 있으며 가지지 μ•Šμ„ μˆ˜λ„ μžˆλ‹€.

- μ•± 라이프 사이클 λ™μ•ˆ RIB은 attach ν•˜κ±°λ‚˜ deattach ν• μˆ˜ 있고 μΉ λ“œ λ…Έλ“œλ₯Ό μƒμ„±ν•˜κ±°λ‚˜ 각 λ…Έλ“œ μ‚¬μ΄μ˜ μΈν„°λ ‰μ…˜μ„ ν•  수 μžˆλ‹€. 

 

https://github.com/uber/RIBs/wiki

Router

μΈμ ‘ν•œ RIBs 사이λ₯Ό navigation ν•  수 μžˆλ‹€.

 

Interactor

RIB의 메인 μ»΄ν¬λ„ŒνŠΈμ΄λ©° λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ 핸듀링 함. μ‚¬μš©μžμ™€ μΈν„°λ ‰μ…˜ ν•˜λ©°, λ°±μ—”λ“œμ™€μ˜ μ†Œν†΅μ„ λ‹΄λ‹Ήν•œλ‹€. μ‚¬μš©μžμ—κ²Œ 보여져야 ν•  데이터λ₯Ό μ€€λΉ„ν•œλ‹€. 인터렉터가 λ·°λ₯Ό μ†Œμœ ν•˜κ²Œ 되며 λ·°λŠ” 델리게이트 νŒ¨ν„΄μ„ ν†΅ν•˜μ—¬ Interactor와 μƒν˜Έ μž‘μš©ν•¨

 

Builder

λͺ¨λ“  RIB듀을 ν•˜λ‚˜λ‘œ λ§Œλ“€μ–΄ μ£ΌλŠ” ꡬ쑰체이닀.

 

View

λ·°λŠ” μ–΄λ– ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§λ„ 가지지 μ•ŠλŠ”λ‹€. μ‚¬μš©μžμ˜ ν„°μΉ˜μ™€ 같은 μƒν˜Έμž‘μš©μ„ λ°›μ•„ interactor둜 μ „λ‹¬ν•˜λŠ” μ—­ν™œμ„ ν•œλ‹€. λ·°λŠ” UIλ₯Ό λ Œλ”λ§ ν•œλ‹€. 

 

Presenter

λ·°κ°€ κ΅¬ν˜„ν•˜λŠ” 기본적인 ν”„λ‘œν† μ½œ.

 

example ) μ‚¬μš©μžκ°€ View에 μžˆλŠ” λ²„νŠΌμ„ λˆ„λ¦„ -> interactor에 μžˆλŠ” web-taskκ°€ 트리거 됨 -> interactorκ°€ presentorμ—κ²Œ μ•‘ν‹°λΉ„ν‹° 인디케이터λ₯Ό λ„μš°λ„λ‘ 함 -> λ„€νŠΈμ›Œν‚Ή 성곡 -> interactor κ°€ routerμ—κ²Œ λ‹€μŒ ν™”λ©΄μœΌλ‘œ μ΄λ™ν•˜λ„λ‘ 함

 

view와 presenterλŠ” μ˜΅μ…”λ„λ‘œ λ˜μ–΄ μžˆλ‹€. 즉 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§λ§Œμ„ μœ„ν•œ RIB을 μƒμ„±ν•˜λŠ” 것이 κ°€λŠ₯ν•˜λ‹€. 

 


ν”„λ‘œμ νŠΈμ— μ„ΈνŒ…ν•΄ μ£ΌκΈ° 전에 ν…œν”Œλ¦Ώμ΄ ν•„μš” ν•˜λ‹€. new file 해쀄 λ•Œ RIBs ν…œν”Œλ¦Ώμ„ 생성해 μ£ΌκΈ° μœ„ν•΄μ„œ xCode에 ν…œν”Œλ¦Ώμ„ μ„ΈνŒ…ν•΄ μ£Όμ–΄μ•Ό ν•œλ‹€

μš°μ„  μ•„λž˜ uber 의  RIBs κΉƒν—ˆλΈŒλ‘œ λ“€μ–΄κ°„λ‹€.

https://github.com/uber/RIBs

 

GitHub - uber/RIBs: Uber's cross-platform mobile architecture framework.

Uber's cross-platform mobile architecture framework. - GitHub - uber/RIBs: Uber's cross-platform mobile architecture framework.

github.com

μ—¬κΈ°μ„œ Download ZIP을 눌러 μ£Όκ±°λ‚˜ Open with GitHub Desktop을 눌러 μ€€λ‹€

νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œ 받은 파일둜 λ“€μ–΄κ°€ 보면 RIBs-master λΌλŠ” 폴더가 μžˆλ‹€.

크둜슀 ν”Œλž«νΌμ„ μ§€μ›ν•˜κΈ° λ•Œλ¬Έμ— android와 ios κ°€  masterλΌλŠ” μ΄λ¦„μ˜ 폴더에 같이 λ“€μ–΄κ°€ μžˆλ‹€. ios 폴더 더블클릭

tooling μ΄λΌλŠ” 폴더λ₯Ό 더블 ν΄λ¦­ν•˜λ©΄

 

ν…œν”Œλ¦Ώ μ„€μΉ˜λ₯Ό μœ„ν•œ install-xcode-template.sh κ°€ μ‘΄μž¬ν•œλ‹€. 이제 터미널 창을 μΌœμ„œ cd 둜 ν•΄λ‹Ή tooling ν΄λ”λ‘œ 이동 ν•œ λ’€ 

sh λ₯Ό μ‹€ν–‰ μ‹œμΌœ ν…œν”Œλ¦Ώμ„ xCodeμ—μ„œ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•΄μ€€λ‹€. 

./install-xcode-template.sh

ν”„λ‘œμ νŠΈ 생성 ν›„ 

pod 'RIBs', '~> 0.9'
pod 'RIBs', :git => 'https://github.com/uber/RIBs.git', :branch => 'master'

ν”„λ‘œμ νŠΈλ₯Ό μ‹€ν–‰ν•œλ‹€. 

new file을 ν•˜λ©΄ 

RIB을 생성할 수 μžˆλ‹€. 

 

 

μ°Έκ³  링크: 

https://medium.com/swlh/ios-architecture-exploring-ribs-3db765284fd8

 

iOS Architecture: Exploring RIBs

Uber mobile architecture in details

medium.com

 

 

728x90
λ°˜μ‘ν˜•

λŒ“κΈ€