Reactive Programming
- 데이터의 흐름의 개념과 데이터의 변화를 강조하는 programming
RxKotlin
- Kotlin 용 Rx. 아래는 rxkotlin의 세 가지 구성요소.
- Observable : 데이터 또는 이벤트의 스트림. 관찰자가 사용할 항목 방출
- Observer : 위의 Observable이 내보낸 항목을 수신하고 처리함. 관찰자는 onNext, onError, onComplete와 같은 이벤트에 반응할 수 있음.
- Operator : 관찰 가능한 항목을 변환, 필터링, 결합하는데 사용할 수 있는 함수
- 설정 방법
dependencies {
implementation 'io.reactivex.rxjava2:rxkotlin:2.4.0'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
}
- Observable만들기
val observable = Observable.just("안녕하세요, RxKotlin!")
//just는 단일 항목을 내보낸 다음 완료되는 관찰 가능 항목 만듬
val numbers = listOf(1, 2, 3, 4, 5)
val observable = Observable.fromIterable(숫자)
//fromIterable은 목록이나 집합과 같은 iterable에서 항목을 방출하는
//관찰 가능 항목을 만듬
val observable = Observable.create<String> { emitter ->
emitter.onNext("Hello")
emitter.onNext("RxKotlin")
emitter.onComplete()
}
//emitter를 제공해 사용자 지정 관찰 가능 항목 만들 수 있음
- Observable 변환 및 필터링
val numbers = Observable.fromIterable(listOf(1, 2, 3, 4, 5))
val squares = numbers.map { it * it }
//map은 Observable이 내보낸 각 항목에 함수를 적용하고 결과를 내보냄
val evenNumbers = numbers.filter { it % 2 == 0 }
//filter은 필터링해서 반환함~
- Observable 결합
val observable1 = Observable.just(1, 2, 3)
val observable2 = Observable.just(4, 5, 6)
val mergedObservable = Observable.merge(observable1, observable2)
//Observable 병합후 방출
val names = Observable.just("Alice", "Bob", "Charlie")
val ages = Observable.just(30, 25, 35)
val zippedObservable = Observable.zip(names, ages, BiFunction<String, Int, String> { name, age ->
"$name is $age years old"
})
//여러 항목 병합 후 방출
- 오류 처리
val numbers = Observable.create<Int> { emitter ->
emitter.onNext(1)
emitter.onNext(2)
emitter.onError(RuntimeException("Something went wrong!"))
emitter.onNext(3)
}
val errorHandledObservable = numbers.onErrorReturn { -1 }
//onErrorReturn 에러 감지용
val errorProneObservable = Observable.create<String> { emitter ->
emitter.onNext("Hello")
emitter.onError(RuntimeException("Something went wrong!"))
emitter.onNext("World")
}
val retriedObservable = errorProneObservable.retry(3)
//retry: 에러 발생시 다시 구독
- 스케쥴러
val backgroundObservable = Observable.just("Hello")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
//스레딩 제어 가능. subscribeOn은 구독에서 사용할 스레드를 지정
//observeOn 다음 처리를 진행할 때 사용할 스레드 지정
//Schedulers는 연산자 체인에 멀티스레딩을 적용하기 위함.
//특정 스케줄러를지정하는거
Uploaded by N2T