프로젝트를 진행하며 .observe(on: MainScheduler.instance)코드를 보게 되었다.
해당 부분 코드를 수정하며 RxSwift에서 제공하는 스케줄 관리 방법에 대하여 알게 되었다.
우선 observable의 주기를 알아야 겠다
_ = Observable<Int>.creat() {observer in
//subscribe closure
return Disposable.creat()
}
.map {_int //operators
}
.subscribe { event in
//observe closure
}
creat operator를 통하여 Observable이 생성된다고 생각하였다. 하지만 실제로 create로 바로 생성되는 것은 아니었다.
이는 subscribe한 시점에 Obserable이 생성된다.
obserable.subscribe { event in
//observe closure
}
즉 obserable이 생성된다는 것은 결국 subscribe closure가 실행된다는 의미다.
이러한 closure들은 모두 기본적으로 current thread/scheduler에서 실행된다. dispose또한 동일한 current/tread/scheduler에서 실행된다.
여기서 실행되는 곳을 정해주는 것이 2가지 subscribe(on:), observe(on:)이다.
_ = Observable<Int>.creat() {observer in
//subscribe closure
return Disposable.creat()
}
.subscribe(on: Main.Scheduler.instance)
.map {_int //operators
}
.subscribe(on: ConcurrentDispatchQueueScheduler(qos: . background))
.subscribe { event in
//observe closure
}
만약 이렇게 두 곳에서 subscribe를 사용하면 무조건 처음 사용한 것만 적용이 된다.
즉 현재 코드에서는 Main.Scheduler.instance에서 실행되는 것이다.
subscribe(on : )ㅔ 의해 정해진 thread/scheduler는 바꾸지 않으면 계속 유지!!
해당 scheduler를 변경해 주는 것이 바로 observe(on:)이다.
위의 코드를 실행하고 나면 기본적으로 schedluer가 backgournd로 설정되어 있다. 해당 부분을 바꾸기 위해 코드를 변경하면
_ = Observable<Int>.creat() {observer in
//subscribe closure
return Disposable.creat()
}
.observe(on: Main.Scheduler.instance)
.map {_int //operators
}
.subscribe(on: ConcurrentDispatchQueueScheduler(qos: . background))
.onserve(on : ConcurrentDispatchQueueScheduler(qos: . background))
.subscribe { event in
//observe closure
}
.disposed(by : disposBag)
으로 변경할 수 있다.
observe(on:)은 정확히 호출된 이후 시점의 thread/scheduler에만 영향을 준다.
해당 내용을 이해한 이후 아래 그림을 보게 되면 이해할 수 있다😎

observe내용은 어느정도 알겠지만 아직 의존성 주입을 어떻게 해야할지를 잘 이해하지 못하겠다.😭