공식 문서에 따르면 직접적인 코드 구현을 통해 옵저버 메서드를 호출하여 Observable을 생성한다 라고 기록이 되어 있다. 쉽게 생각하면 Observable을 제어하고 사용자가 원하는 동작을 정의 할 수 있는 연산자이다.
주의해야 할 점
은 Observable을 동작 내에서 적절한 시기에 onNext, onError, onComplete
를 호출하여 올바른 신호를 보내야 합니다.
Observable.create(emitter -> {
// Observable을 동작 정의
// Observable을 생성한 후
// onNext : 메서드를 호출하여 값을 발행한다.
// onError : 메서드를 호출하여 에러 신호를 보낸다.
// onComplete : 메서드를 호출하여 완료 신호를 보낸다.
})
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
createOperator().subscribe(
{
Log.d("createOperator", "onNext : $it")
},
{
Log.d("createOperator", "onError ${it}")
},
{
Log.d("createOperator", "발행완료")
}
).let { _ -> }
}
}
fun createOperator(): Observable<Int> {
val mListNum = mutableListOf(1, 2, 3, 4, 5)
return Observable.create(ObservableOnSubscribe {
try {
for (i in mListNum) {
it.onNext(i * 5)
}
it.onComplete()
} catch (e: Exception) {
it.onError(e)
}
})
}
ObservableOnSubscribe
는 사용자 정의 Observable
을 생성하기 위해 구현해야 하는 인터페이스이며 create
연산자의 매개변수로 사용되며 Observable
을 생성하고 동작을 정의하는 역할을 수행한다.try ~ catch
로 예외 처리를 해주었고 예외가 발생하면 catch 부분에서 에러 신호를 전달( it.onError(e)
) 해 주었습니다.it.onNext
를 호출하여 발행했습니다.