RxKotlin

2023. 7. 26. 11:09개발/Kotlin

Reactive Programming

  • 데이터의 흐름의 개념과 데이터의 변화를 강조하는 programming

RxKotlin

  • Kotlin 용 Rx. 아래는 rxkotlin의 세 가지 구성요소.
    • Observable : 데이터 또는 이벤트의 스트림. 관찰자가 사용할 항목 방출
    • Observer : 위의 Observable이 내보낸 항목을 수신하고 처리함. 관찰자는 onNext, onError, onComplete와 같은 이벤트에 반응할 수 있음.
    • Operator : 관찰 가능한 항목을 변환, 필터링, 결합하는데 사용할 수 있는 함수

  1. 설정 방법
dependencies {
    implementation 'io.reactivex.rxjava2:rxkotlin:2.4.0'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.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를 제공해 사용자 지정 관찰 가능 항목 만들 수 있음

  1. 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은 필터링해서 반환함~

  1. 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"
})
//여러 항목 병합 후 방출

  1. 오류 처리
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: 에러 발생시 다시 구독 

  1. 스케쥴러
val backgroundObservable = Observable.just("Hello")
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
//스레딩 제어 가능. subscribeOn은 구독에서 사용할 스레드를 지정
//observeOn 다음 처리를 진행할 때 사용할 스레드 지정
//Schedulers는 연산자 체인에 멀티스레딩을 적용하기 위함.
//특정 스케줄러를지정하는거

Uploaded by N2T

'개발 > Kotlin' 카테고리의 다른 글

Kotlin Unpacking params  (0) 2023.07.26
Kotlin <in, out, where>  (0) 2023.07.26
Kotlin operator extension  (0) 2023.07.25
Kotlin flow  (0) 2023.07.25
reified + inline  (0) 2023.05.03