Skip to main content

RIbs?

RIBs 가 나온 이유

  • 모듈화에 대하여
    • MVC를 사용할 때 새로운 기능이 늘어나며 앱의 복잡성 증가
    • 모듈이 증가할 수록 테스트 하기 어려워짐
    • 하나의 ViewController파일이 너무 많이 증가
      • 테스트가 어려운 구조
      • 비즈니스 로직, 데이터 변경, 데이터 검증, 네트워크 로직, 라우팅 로직이 나눠짐

VIPER 아키텍쳐의 등장

  • View
  • Interactor
    • 비즈니스 로직 포함, API나 DB로 Data를 받아서 Entity 생성
  • Presenter
    • View에서 유저 액션을 받고, Interactor에 Data를 요쳥하여 View에 그림
  • Entity
    • Interactor에 의해 만들어지는 모델
  • Router
    • 화면 전환 로직

VIPER 는 MVC에 비해서 VIPER는 더 추상적이었으며 가볍게 유닛 테스트가 가능했습니다.

RIBs 탄생 배경

  • VIPER 단점 보완
  • RIBs의 목표는 제대로 된 모듈화가 목적이지만 VIPER는 그러지 않았다.
  • View 트리를 중심으로 앱이 진행되는 단점
  • View에 의해 앱 상태가 동작되는 장점

RIBs 아이디어

  • view가 아닌 business logic 중심구조
    • state 변화는 view가 아닌 business logic 관리
    • 하나의 화면이 여러 viewcontroller로 이루어질 수 있다는 점이 존재

RIBs 구조

Interactor

  • 비지니스 로직을 포함합니다.
  • Rx Sequence에 대한 Subsciption 수행
  • child RIB을 붙일지 말지 결정
  • 부모 자식 RIB 간의 통신

Router

  • Interactor를 바라보고 있다가 RIBs를 붙이거나 떼버리거나 합니다.
  • Interactor의 결정이 오면 RIB 노드를 attach 하거나 detach 하는 작업을 진행하여 논리적인 트리 구조 형성

Builder

  • RIB의 모든 컴포넌트를 생성하고 DI를 정의
  • Router, Interactor, View, Component를 생성
  • 각 컴포너트 클래스들을 생성하고 자식 Interactor와 부모 Interactor의 Listenr 인터페이스 연결을 구성하고 Router를 Output으로 반환하게 된다.
  • Builder는 본인의 역할을 위해서 Buildable와 Builder이 있습니다.

View

  • View는 UI 화면을 구성하고 생성하며, 사용자로 부터 들어온 UIEvent를 Presenter에게 전달하거나 UI를 업데이트하는 역할을 합니다.

Presenter

  • 비지니스 로직을 수행하는 Interactor와 UI를 구성하는 View 사이에서 통신을 담당합니다.
  • Router, Interactor, Builder 3가지는 RIB의 필수 구성 요소이며 그 외 Optional로 View와 Presenter라는 컴포넌트가 존재합니다.