이번 글에서는 Observable을 생성하는 Operator에 대해 이야기 합니다.

Observable을 생성하는 Operator는 아래와 같이 있습니다.

create

emitter를 지정하고 함수 내부에서 onNext(), onError(), onComplete() 를 호출 해서 데이터를 전달 할 수 있습니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a3fb095f-333a-45e9-8e66-8bfd3ef5923a/Untitled.png

fun main() {
    val observable = Observable.create<String> { emitter ->
        // Hello 전달
        emitter.onNext("Hello")
        // World 전달
        emitter.onNext("World")
        // 완료
        emitter.onComplete()
    }
    observable.subscribe({
        // onNext로 전달 된 데이터 출력
        println(it)
    }, {
        // 에러 처리
        it.printStackTrace()
    }, {
        // 완료 이벤트
        println("onComplete")
    })
}

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3aa0e37b-70be-45fe-8a67-d1b6d19a895c/Untitled.png

defer

ObservableSource를 리턴하는 Callable을 받는 operator입니다. subscribe 하기 전까지 Observable을 만들지 않습니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/642738db-5879-40c9-9b1d-d853f68bc44f/Untitled.png

fun main() {
    val observable = Observable.defer {
        ObservableSource<Int> {
            println("생산")
            it.onNext(1)
        }
    }
    observable.subscribe { println(it) }
    observable.subscribe { println(it) }
}

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4c0bace9-8d95-47c9-9f92-e69bcb9cfdb7/Untitled.png

empty/never/throw

데이터 전달 없이 완료처리, 무처리, 에러처리 를 하는 Observable을 만듭니다.

empty

데이터를 전달하지는 않고 완료 처리 만 하는 Observable을 만드는 operator 입니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/741a1647-566a-4c43-88b0-f93a66055524/Untitled.png

fun main() {
    val observable = Observable.empty<String>()
    observable.subscribe({
        // onNext로 전달 된 데이터 출력
        println(it)
    }, {
        // 에러 처리
        it.printStackTrace()
    }, {
        // 완료 이벤트
        println("onComplete")
    })
}

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/0146cb60-caf3-4bf7-b91f-d91f8374bf9b/Untitled.png