Clint님 블로그
필권님 RxFlow 이론
필권님 RxFlow 실전
필권님 RxFlow 팁과 요령
현재 회사의 프로젝트는 ReactorKit 구조로 되어있다.
사내 앱을 Refactoring하는 과정에서
화면 이동에 대한 로직 처리를 어떻게 분리시킬 수 있을까?
라우팅 처리를 어떻게 하면 깔끔하고 쉽게 알아볼 수 있을까?
에 대한 고민을 시작했다.
내가 아는 방법 중에는 Coordinator Pattern을 적용하는 방법이 있었다.
Coordinator Pattern은 View에서 하던 navigation flow, model mutation(객체 생성, 코디네이터와 의존관계를 만듬)을 분리하는 것으로 알고 있다.
더 나은 방법이 있나 고민하던 중 RxFlow란 프레임워크에 대해 알게되었고, 일반적인 Coordinator와 RxFlow 중 어떤 점이 나을까에 대한 고민을 시작했다.
RxFlow는 RxSwiftCommunity 내에서 찾을 수 있다.
RxFlow is a navigation framework for iOS applications based on a Reactive Flow Coordinator pattern.
RxFlow는 Coordination Pattern
기반의 navigation framework 이다.
즉 Coordinator를 Reactive하게 사용할 수 있는 프레임워크라고 생각된다.
RxFlow의 목적은 다음과 같다.
RxFlow의 장점
1. 스토리보드를 유닛 단위로 쪼개서 UIViewController의 재사용성을 키웁니다
2. 네비게이션의 흐름(context)에 맞게 UIViewController를 다른 방식으로 보여줄 수 있습니다
3. 의존성 주입(Dependency Injection)을 쉽게 구현할 수 있습니다
4. UIViewController에 있는 모든 네비게이션 매커니즘을 삭제합니다.
5. 반응형 프로그래밍(Reactive Programming) 사용을 촉진합니다
6. 네비게이션에서 일어나는 대부분의 케이스를 처리하면서 선언형으로 표현할 수 있습니다
7. 어플리케이션을 네비게이션의 논리적인 블록으로 나눌 수 있습니다
다음은 RxFlow에서 사용하는 기본적인 용어들에 대한 설명이다.
RxFlow의 기본적인 용어
1. Flow: Flow는 어플리케이션의 네비게이션 공간을 규정합니다. 이 공간에서는 우리가 네비게이션 액션들을 선언할 수 있습니다. (UIViewController 또는 다른 Flow를 띄우는 것처럼요)
2. Step: Step은 어플리케이션의 네비게이션 상태입니다. Flow와 Step을 조합하면 가능한 모든 네비게이션 액션을 설명할 수 있습니다. Step은 내부 값(Ids, URLs 등이 있습니다)을 임베드할 수 있어서 Flow에 선언된 화면에 전달할 수도 있습니다.
3. Stepper: Step을 발생시킨다면 무엇이든 될 수 있습니다. Stepper는 Flow의 모든 네비게이션 액션을 트리거해야 합니다.
4. Presentable: 보일(present) 수 있는 무언가를 추상화한 것입니다. (기본적으로 UIViewController와 Flow가 Presentable입니다) Presentable은 Reactive 옵저버블을 제공하고 Coordinator가 Flow와 Step을 UIKit에서 더 편한 방식으로 조종하기 위해 이를 구독합니다.
5. Flowable: Presentable과 Stepper를 조합하는 간단한 데이터 구조입니다. Flowable은 우리의 Reactive 매커니즘의 새로운 Step이 생성할 게 무엇인지 Coordinator에게 알려줍니다.
6. Coordinator: 네비게이션 가능성을 표현하는 Flow와 Step의 적절한 조합을 정의했다면 Coordinator가 해야 할 일은 이 조합을 지속해서 잘 섞는 것입니다.