RIBs란?

RIBs는 Router, Interactor, Builder의 약자로 이들이 모여 하나의 노드를 이룬다.

이 노드에는 R, I, B외에 View와 Presenter가 optional하게 들어갈 수 있고, 이들이 보여 하나의 노드를 이룬다고 볼 수 있다. 그리고 이렇게 구성된 여러 노드가 모여 하나의 앱이 된다.

VIPER와 다른점이라면 VIPER는 View 중심으로 구현되는 아키텍처이고, RIBs는 Presenter와 View가 optional한 부분에서 알 수 있듯이, Business Logic 중심의 아키텍처이다.

RIBs는 Composition이 매우 강력한 아키텍처이다. RIBlet의 Dependency만 충족시켜줄 수 있으면 어디서든 attach를 할 수 있다. 하나의 화면도 여러 RIBlet으로 쪼개는게 쉽고(?) 자연스럽다.

RIBlet끼리 소통하고 정보를 주고받을 때는 RIBlet의 두뇌인 Interactor끼리 정보를 주고 받는다. 부모가 자식한테 데이터를 줄 때와 자식이 부모한테 데이터를 줄 때 방법이 다르다.

부모가 자식한테 데이터를 줄 때는 Stream을 이용한다. 가장 큰 이유는 RIBlet은 여러개의 자식 RIBlet을 가지고 있고 이렇게 1:N의 관계에서는 Stream을 이용하는게 좋다. 그 이유는 Stream은 하나의 Stream을 여러개에서 구독하면 한 번에 값을 전달하기가 수월하기 때문이다. 반대로 자식은 하나의 부모 RIBlet 밖에 가질 수 없기 때문에 delegate 패턴을 이용한다.

Untitled

RIBs의 구성요소

1. Builder

RIBs의 모든 구성요소를 생성하고 DI를 정의한다.

RIBs의 구성요소 중 Router, Interactor, View, Component 를 모두 생성하는 곳이다.(build 메소드 구현)

2. Component

부모 RIBlet의 Builder가 Component를 통해 자식 RIBlet의 Builder로 의존성을 주입해준다.

3. Interactor

비즈니스 로직을 수행하는 곳이다. Router로 Routing Call과 RIBs의 트리를 만들어주는 attach, detach를 요청하고, Presenter로 Data model을 전달한다.