관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] 1. RIBs가 나온 배경 본문

Architecture (swift)/RIBs

[iOS - swift] 1. RIBs가 나온 배경

jake-kim 2021. 4. 16. 22:48

uber가 RIBs를 만든 이유 - 모듈화

MVC 패턴

  • MVC를 사용할 때 새로운 기능이 늘어나며 앱의 복잡성 증가
  • 모듈이 증가할수록, 테스트 하기 점점 어려워지는 현상
  • 4년동안 MVC패턴 사용 -> 관리하기가 힘든 scale (하나의 ViewController파일에 300줄 -> 3000줄)
    • massive view controllers (비즈니스 로직, 데이터 변경, 데이터 검증, 네트워크 로직, 라우팅 로직)
    • 테스트가 어려운 구조 (if-else문으로 테스트)

VIPER 아키텍처

VIPER 패턴

  • View
  • Interactor: 비즈니스 로직포함, API나 DB로 Data르 받아서 Entity(모델) 생성
  • Presenter: View에서 유저 앣견을 받고, Interactor에 data를 요창하여 VIew에 그려주는것을 다시요청
  • Entity: Interactor에 의해 만들어지는 모델
  • Router: 화면전환 로직

VIPER의 장점 (MVC에 비해 VIPER는 더욱 추상적 )

  • Router
  • Interactor는 단순히 데이터의 manipulation or verification만 관여 (api 호출)
  • Presenter는 business 로직을 가지고 presentation 로직을 포함
  • Presenter, Interactor들은 가볍게 유닛 테스트가 가능

RIBs 탄생 배경 (VIPER 단점 보완)

  • “제대로 된 모듈화가 목적”이지만 VIPER는 그러지 않는 점이 존재
  • View 트리와 business 트리가 밀접하게 결합되어 있어, View로직만 포함하거나 business 로직만 포함하는 노드를 구현하기 힘든 점
  • View 트리를 중심으로 앱이 진행되는 단점, View에 의해 앱 상태가 동작되는 장점 -> RIBs 트리로 보완

VIPER -> RIB

RIB

  • Router를 부르는 위치가 Presenter에서 Interactor로 이동
  • business logic -> Router, Interactor
  • view logic -> Presenter, View

* 참고: 

uber 개발자: https://eng.uber.com/new-rider-app-architecture/

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

Comments