단방향 데이터 흐름을 가진 반응형 앱을 위한 Kit
RxSwift를 사용할 때 중간 상태를 관리하기 위해 BehaviorSubject
를 사용하게 되는데, 이는 중간 상태를 명령형으로 관리하는 것이다.
하지만 RxSwift는 선언형으로 사용하기를 권고한다.
reduce()
메소드로 관리한다. 따라서 상태 관리가 간결해진다.뷰는 Reactor에게 Action을 전달하고, Reactor에서는 State를 View에게 전달하는 방식으로 단방향 스트림을 이용한다.
Reactor는 mutate()
, reduce()
두 단계를 거쳐서 Action 스트림을 State 스트림으로 변환한다.
mutate()
Action을 받아서 Observable<Mutation>
을 반환한다.
비동기 작업이나 API Call과 같은 side effect는 모두 이 메소드에서 이루어진다.
reduce()
이전 State와 Mutation로 새로운 State를 생성한다. 이 메소드는 State를 동기적으로 반환하기만 한다. side effects를 수행하지 않는다.
transform()
Observable 스트림을 변환하고 결합한다. 디버깅 목적으로도 사용할 수 있다.
View는 사용자 Action이 Reactor에 전달되는지, State가 올바르게 설정되는지에 대한 테스트를 한다.
Reactor는 작업을 통해 State가 정상적으로 변경되는지에 대한 테스트를 한다.
Reactor가 가지고 있는 stub
프로퍼티로 테스트할 수 있다. stub
은 액션을 기록하고 상태를 강제적으로 변경한다. stub
이 활성화되면 mutate()
와 reduce()
는 동작하지 않는다.