[TIL] RxFlow

Eden·2025년 8월 19일

1. RxFlow란?

RxFlow는 RxSwift 기반의 Coordinator 패턴을 지원하는 라이브러리로, 화면 전환(Navigation)과 플로우(Flow)를 명확하게 분리하고 관리할 수 있도록 도와줍니다.
MVVM 아키텍처와 함께 사용되며, 화면 전환 로직을 뷰컨트롤러에서 분리해 코드의 가독성과 유지보수성을 높입니다.


2. 주요 개념

Step

  • 앱에서 발생할 수 있는 이동 이벤트를 의미합니다.
  • 열거형(enum)으로 정의하여 특정 화면 전환을 표현합니다.
enum AppStep: Step {
    case login
    case home
    case detail(id: Int)
}

Flow

  • 특정 기능이나 화면 그룹의 네비게이션 흐름을 정의합니다.
  • Flow 프로토콜을 채택하며, 어떤 Step이 들어왔을 때 어떤 화면을 보여줄지 결정합니다.

Stepper

  • 어떤 Step을 발행할지 정의하는 객체입니다.
  • ViewModel이나 특정 로직에서 Step을 트리거할 수 있습니다.

Coordinator

  • 여러 Flow들을 관리하고 연결해주는 역할을 합니다.
  • 전체 앱의 흐름을 제어합니다.

3. RxFlow 동작 흐름

  1. 사용자 액션이 발생 → ViewModel에서 Step을 발행
  2. Stepper가 Step을 Coordinator로 전달
  3. Coordinator는 해당 Step을 처리할 Flow로 전달
  4. Flow는 Step에 따라 새로운 화면(ViewController)을 생성 및 전환

4. RxFlow 장점

  • 화면 전환 로직 분리 → ViewController가 가벼워짐
  • 유지보수 용이성 → Flow 단위로 관리 가능
  • 의존성 관리 개선 → Coordinator 패턴과 결합되어 테스트 용이
  • RxSwift와 자연스러운 결합

5. 간단한 예시

final class AppFlow: Flow {
    var root: Presentable { return self.rootWindow }
    private let rootWindow: UIWindow

    init(window: UIWindow) {
        self.rootWindow = window
    }

    func navigate(to step: Step) -> FlowContributors {
        guard let step = step as? AppStep else { return .none }
        switch step {
        case .login:
            return navigateToLogin()
        case .home:
            return navigateToHome()
        default:
            return .none
        }
    }

    private func navigateToLogin() -> FlowContributors {
        let vc = LoginViewController()
        self.rootWindow.rootViewController = vc
        return .one(flowContributor: .contribute(withNextPresentable: vc, withNextStepper: vc.viewModel))
    }
}

6. 결론

RxFlow는 화면 전환을 체계적으로 관리할 수 있는 강력한 도구입니다.
MVVM과 함께 사용하면 뷰, 로직, 네비게이션을 명확히 분리하여 깨끗하고 유지보수하기 쉬운 코드를 작성할 수 있습니다.

profile
iOS Dev

0개의 댓글