RIBs

wiki

kimji1
5 min readApr 20, 2021

MV*/VIPER 과의 차이점?

MVC, MVP, MVI, MVVM and VIPER 는 architecture patterns
RIBs는 framework

RIBs 란?

Encourage Cross-Platform Collaboration

iOS와 Android 의 개발 구조를 유사하게 표현할 수 있다.

Minimize Global States and Decisions

Global state 의 변경은 예측할 수 없는 동작을 야기하거나 변경에 대한 영향을 모두 파악하기 어렵게 만들기 때문에 RIBs에서는 잘 나눠진 개별적인 RIBs로 state를 캡슐화 할 수 있어, global state의 이슈를 피할 수 있다.

Testability and Isolation

RIB의 각 클래스는 고유한 책임을 가지며 상위 RIB 로직은 하위 RIB로직과 결합되어있지(decoupled — 한 곳에서의 변경이 다른 변경을 야기하지 않는 것) 않아서 테스트를 용이하게 하고 독립적으로 만들 수 있다.

Tooling for Developer Productivity

RIBs code 생성, 정적 분석과 런타임 통합에 관련된 IDE 도구가 제공되어 개발자의 생산성을 향상시킬 수 있다.

Open-Closed Principle

객체지향 설계원칙 SOLIDOCP(새 기능을 추가할 때 기존 코드의 변경 없이 추가할 수 있도록 해야한다)는 RIBs 적용 시 몇 군데에서 볼 수 있다. 예를 들어 상위 RIB의 종속성을 가지는 복잡한 하위 RIB을 추가할 때 상위 RIB은 거의 변경하지 않고 추가할 수 있다.

Structured around Business Logic

비즈니스 로직이 UI에 따라 구성되는 것이 아닌, 하나의 기능을 구현하는 RIB이 서로 다른 위치에 보여지는 뷰가 제어하도록 하는 것 처럼 비즈니스 로직을 중심으로 구현할 수 있다.

Explicit Contracts

rx를 사용하여 종속성을 정리하고, type safe (타입을 판별할 수 있어, 컴파일 시 문제를 잡을 수 있는 것)한 DI 시스템을 이용하여 클래스 종속성을 나타내고 많은 DI scope를 사용하여 불변의 데이터를 생성하도록 한다.

RIB의 구성

Interactor

interactor는 비즈니스 로직을 가진다. interactor에서는 Rx 구독, 상태 변경, 데이터를 어디에 저장할지와 다른 하위 RIBs 를 가질지 결정한다.

interactor의 모든 기능은 interactor의 lifecycle에 한정되어야 한다. 비즈니스 로직이 interactor가 활성화 되었을 때에만 실행됨을 보장해야 한다. 이를 통해 interactor가 비활성화 되었을 때 구독된 값이 발행되어도 원치 않는 비즈니스 로직과 뷰의 상태 변경이 발생하지 않도록 할 수 있다.

Router

Router는 Interactor를 수신하고, 연결/분리 되는 하위 RIBs에 그 output을 변환하여 전달한다. Router는 아래 세 가지 이유로 존재한다.

  • Router는 복잡한 interactor를 하위 interactor의 mock 이나 생성을 신경쓰지 않고 테스트 하기 쉽게 만들어주기 때문에 Humble Object 역할을 한다.
  • Router는 상위 interactor와 하위 interactor 사이에 추가적인 추상 계층을 만들어준다. 이는 interactor 사이에서 동기 통신이 더어렵게 하고, RIBs 사이에 직접적인 결합이 발생하는 것 대신 반응형 통신을 하도록 만들어준다.
  • Router는 Interactor에 의해 구현된 간단하고 반복적인 라우팅 로직을 가진다. 이런 boilerplate code를 구현하면 interactor 를 작게 유지하고, RIB이 제공하는 핵심 비즈니스 로직에 집중할 수 있다.

Builder

Builder는 RIB을 구성하는 모든 클래스들과 각 하위 RIB에 대한 Builder를 생성한다. 그렇기 때문에 DI 시스템을 알고 있는 RIB의 유일한 부분이고, DI 메커니즘을 바꾸더라도 Builder만 새로 작성해주면 RIB의 코드를 재사용 할 수 있다.

Presenter

view model — business model 사이 변환을 담당하는 상태를 가지지 않는 클래스이다. 필수는 아니며, Presenter 가 생략된 경우 관련 로직은 View(Controller) 또는 Interactor 에 포함된다.

View(Controller)

UI 빌드와 업데이트를 한다. UI 구성 요소 인스턴스화 및 레이아웃, 사용자 상호 작용 처리, UI 구성 요소에 데이터 넣는 작업 및 애니메이션이 포함된다. View 는 가능한 한 “멍청”하게 설계하며, 단순히 데이터만 표시되도록 한다. 일반적으로 단위테스트가 필요한 코드를 포함하지 않는다.

Component

RIB 종속성 관리에 사용된다. RIB의 다른 구성요소를 인스턴스화 하는 Builder를 보조한다. RIB 구성에 필요한 외부 종속성 관리 및 RIB 내에서 만들어진 종속성을 가져 다른 RIB의 접근을 제어한다. 상위 RIB의 Component는 일반적으로 하위 RIB의 Builder 에 넘겨져 상위 RIB의 종속성에 대한 접근 권한을 부여한다.

--

--

kimji1
kimji1

No responses yet