RxSwift) RxFlow 적용하기 (1)

Havi·2021년 4월 8일
0

RxFlow

목록 보기
1/3

RxFlow 공식 깃헙

Clint님 블로그
필권님 RxFlow 이론
필권님 RxFlow 실전
필권님 RxFlow 팁과 요령

RxFlow의 도입을 고민하게된 계기

현재 회사의 프로젝트는 ReactorKit 구조로 되어있다.

사내 앱을 Refactoring하는 과정에서

화면 이동에 대한 로직 처리를 어떻게 분리시킬 수 있을까?
라우팅 처리를 어떻게 하면 깔끔하고 쉽게 알아볼 수 있을까?

에 대한 고민을 시작했다.

내가 아는 방법 중에는 Coordinator Pattern을 적용하는 방법이 있었다.

Coordinator Pattern은 View에서 하던 navigation flow, model mutation(객체 생성, 코디네이터와 의존관계를 만듬)을 분리하는 것으로 알고 있다.

더 나은 방법이 있나 고민하던 중 RxFlow란 프레임워크에 대해 알게되었고, 일반적인 Coordinator와 RxFlow 중 어떤 점이 나을까에 대한 고민을 시작했다.

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가 해야 할 일은 이 조합을 지속해서 잘 섞는 것입니다.

profile
iOS Developer

0개의 댓글