본문 바로가기
💻 프로그래밍

[RxJava] #4 Operators(2) 변형연산자

by 콩드로이드 2022. 8. 14.

2022.08.03 - [💻 프로그래밍] - [RxJava] #3 Operators(1)

 

[RxJava] #3 Operators(1)

2022.08.01 - [💻 프로그래밍] - [RxJava] #1 [RxJava] #1 안녕하세요 오늘은 비동기 프로그래밍 중 하나인 RxJava에 대해 알아보겠습니다 API와 통신할 때만 사용했기에, 더 많은 기능을 알고자 정리해보겠

kong-droid.com

이전 포스팅에서는 Observable을 생성하는 Operator에 대해 알아봤습니다 

오늘은 Observable을 변형하는 연산자에 대해 알아보겠습니다  🧐 

 

예시 코드는 rxjava3:rxjava:3.0.7 기준입니다 


변형 연산자 

 

💡 map

• 변형 연산자 중 가장 기본적이고 많이 쓰이는 연산자

map

    val origin = Observable.just(1, 2, 3)
    origin.map { it * 10 }.subscribe {
        println(it)
    } 
    // 10 20 30 출력

 


 

💡 flatMap

• 변환시킨 Observable의 방출되는 아이템 또한 병합해 다시 아이템을 재방출시킴 

//구구단 출력
Observable.range(2, 8)
        .flatMap { x -> Observable.range(1, 9)
            .map { y -> String.format("%d * %d = %d", x, y, x * y) } }
        .subscribe { println(it) }

 


 

💡 buffer

• Observable이 발행한 아이템을 묶어서 리스트로 발행

• 에러가 발생 시 , 에러를 즉시 발행

 

    Observable.range(2, 8)
        .buffer(2)
        .subscribe({ arr ->
            println("-----buffer----")
            println(arr.joinToString { it.toString() })
        }, {
            it.printStackTrace()
        })

 


 

💡 scan

• Observable이 순차적으로 발행한 아이템에 연산을 적용

• 최소 2개 이상의 아이템이 있어야하므로, 처음 아이템은 그대로 출력

• 아이템들이 누적되므로 '누산기(accumulator)'라고도 함

scan

  Observable.just(1, 3, 5, 7, 9)
        .scan { t1, t2 ->
            println(String.format("%d*%d = %d", t1, t2, t1 * t2))
            t1 * t2
        }.subscribe()

 


💡 groupBy

• 말 그대롭니다 

아이템들을 특정 조건으로 그룹화하여 GroupObservable로 재정의

말 그대롭니다..

    Observable.range(1, 10)
        .groupBy { if (it % 2 == 0) "짝" else "홀" }
        .subscribe {
            it.subscribe { item ->
                println(it.key + ": $item")
            }
        }

 


RxJava의 연산자는 아직 끝이 아닙니다 다음은 3탄으로 돌아올게요 :) 

궁금하신 점이나 의견이 있으시면 댓글 부탁드립니다 감사합니다 😊

[아키텍처를 알아야 앱 개발이 보인다] 책을 많이 참고했습니다 찰스님 짱👍🏻