defualtIfEmpty 어떠한 배출 값도 없을 때 또는 빈 프로듀서가 나타날때 Default 값을 배출한다. Code Observable.range(0, 10) .filter { it > 10 } .defaultIfEmpty(15) .subscribe{println("Receive $it")} 결과 예외 만약 필터링에 Observable.range(0, 10) .filter { it > 8 } .defaultIfEmpty(15) .subscribe{println("Receive $it")} 배출되는 값이 있을경우 .defaultIfEmpty(15) 는 출력 되지 않는다. 결과 switchIfEmpty 어떠한 배출값도 없는경우 Default Observable을 반환 할수 있다. Code Observa..
Observable(여기서는 생산자라 지칭 하겠다) 은 Observer(여기서는 소비자라 지칭 하겠다)의 소비량이 늦어질경우 , 즉 소비량이 배출량을 따라가지 못 할 경우 Out of memorry등 여러가지 문제점이 생기는데, 이 문제를 해결하기 위해 소비자와 생산자의 소통이 필요한데, 이러한 소통을 가능하게 하는게 BackPressure 다. 이를 통해 소비자가 생산자에게 배출에 대한 처리가 완료 될때까지 기다리라고 요청할 수 있으며, 소비자의 메시지 처리량이 포화상태가 되거나 응답하지 않는 것을 막을 수 있고, 생산자는 배출 속도를 줄일 수 있다. Observable과 Observer 는 따로 백프레셔를 지원하지 않는데, 대신 Flowerbles 와 Subscriber를 사용할수 있다. 이부분은 다..
ConnectableObservable 이란? Hot Observable 과 Cold Observable 둘다 사용 가능한 Observable 로서 기능은 다음과 같다. 1. Cold Observable Hot Observable 변환 가능 2. 한개의 Observable에 여러개의 구독을 할수 있으며, 기존의 Cold Observable 처럼 구독시 처음부터 아이템을 배출 하는게 아니라 이전에 호출된 모든 Observer 를 연결 하고 모든 Observer 에게 단일 푸쉬를 전달한다. fun simpleConnectableObservable() { val connectableObservable = listOf("Stream1", "Stream2", "Stream3", "Stream4").to..
observable.from() 과 observable.just() 의 차이에 대해서 알아보자 observable.from은 내부의 아이템들의 요소를 각각 배출하고 observable.just는 내부의 아이템들을 각각 배출하는데 알기쉽게 결과로 보면 다음과 같다. 먼저 from 코드와 결과 이다. 코드 val fromObserver = object : Observer { override fun onComplete() { println("onComplete") } override fun onSubscribe(d: Disposable) { println("New Subscribtion = ${d}") } override fun onNext(item: String) { println("Next = $item"..
hot observable 따로 Subscribe(구독)를 기다리지 않고, 요소들을 배출함 cold observable Observer가 Subscribe 하기 전까지 아무것도 배출하지 않는다.
Observable 은 Observer (이해를 돕기위해 소비자 개념으로 보자) 에게 소비할 수 있는 값을 발행한다. 순차적으로 접근해 보면 다음과 같다. 1. Observer가 Observable을 Subscribe(구독) 한다. 2. Observable이 아이템들을 내보낸다. 3. Observer가 Observable의 아이템들을 소비한다. Observable 의 주요 함수 onNext : 모든 아이템들이 하나씩 들어온다. onComplete : 모든 아이템들이 onNext를 거치고 나면 Observable이 onComplete를 호출한다. onError : Observable이 에러가 발생하면 onError가 호출되며, onError가 호출 되면 onComplete 는 호출되지 않는다.
간단하게 Observable 을 테스트 해보자. var list:List = listOf("Alpha", "Beta", "Gamma", "Delta", "Epsilon") var observable : Observable = list.toObservable() @Test fun simpleObservable() { observable.subscribeBy( onNext = { println("it = $it") }, onError = { it.printStackTrace() }, onComplete = { print("Complete ! ") } ) } 결과 코드를 순서대로 설명하자면, 1. 리스트 생성 2. 생성한 리스트로 observable 인스턴스 생성 3. observable 인스턴스 구독 일단 ..
- 데이터 스트림, 변경사항을 중심으로 하는 비동기 프로그래밍 패러다임. 장점 1. 콜백 지옥의 제거 2. 간결한 스레드 사용 3. 간단한 비동기 연산 4. 모든 작업에 동일한 API 5. 함수형 접근 6. 오류처리에 대한 표준 메커니즘 7. 유지보수 및 테스트 편리