변환 연산자 데이터 흐름을 원하는 대로 변형할 수 있습니다. concatMap flatMap와 매우 비슷합니다. flatMap은 먼저 들어온 데이터를 처리하는 도중에 새로운 데이터가 들어오면 나중에 들어온 데이터의 처리 결과가 먼저 출력될 수도 있습니다. 하지만 concatMap은 먼저 들어온 데이터 순서대로 처리해서 결과를 낼 수 있도록 보장합니다. 입력 import common.CommonUtils import common.Log import io.reactivex.Observable import java.util.concurrent.TimeUnit class ConcatExample { fun marbleDiagram() { CommonUtils.start() val balls = arrayOf("..
Map map 함수는 입력 값을 어떤 함수에 넣어서 원하는 값으로 변환하는 함수입니다. map은 원을 입력 받아서 다이아몬드로 반환하는 것을 볼 수 있습니다. 아래는 마블 다이어그램을 코드로 표현한 것입니다. 입력 import io.reactivex.Observable class MapExample { fun marbleDiagram() { val balls = arrayOf("1", "2", "3", "5") val source = Observable.fromArray(*balls) .map { ball -> "$ball◇" } source.subscribe { data -> println(data) } } } fun main() { val demo = MapExample() demo.marbleDia..
Subject 클래스처럼 차가운 Observable을 뜨거운 Observable로 변환합니다. Observable을 여러 구독자에게 공유할 수 있으므로 원 데이터 하나를 여러 구독자에게 동시에 전달할 때 사용합니다. 특이한 점은 subscribe를 호출해도 아무 동작이 일어나지 않습니다. 새로 추가된 connect는 호출한 시점부터 subscribe를 호출한 구독자에게 데이터를 발행하기 때문입니다. ConnectableObservable 객체를 생성하려면 먼저 Observable에 publish를 호출해야 합니다. publish는 여러 구독자에게 데이터를 발행하기 위해 connect를 호출하기 전까지 데이터 발행을 유예하는 역할을 합니다. 입력 import io.reactivex.Observable cl..
Subject 차가운 Observable을 뜨거운 Observable로 바꿔 줍니다. Subject 클래스의 특성은 Observable의 속성과 구독자 속성이 모두 있다는 것입니다. Observable처럼 데이터를 발행할 수 있고, 구독자처럼 발행된 데이터를 바로 처리할 수도 있습니다. Subject 클래스에는 AsyncSubject, BehaviorSubject, PublishSubject, ReplaySubject 등이 있습니다. AsyncSubject Observable에서 발행한 마지막 데이터를 얻어올 수 있는 Subject 클래스입니다. 마지막 데이터만 가져오고 이전 데이터는 무시합니다. 지금까지와 다르게 마블 다이어그램의 아래쪽에 있는 구독자의 시간 표시 줄이 여러 개입니다. 처음 구독자가 s..
Single 클래스 Observable 클래스는 데이터를 무한하게 발행할 수 있지만, Single 클래스는 오직 1 개의 데이터만 발행합니다. API를 호출할 때 유용하게 사용할 수 있습니다. just 함수 입력 import io.reactivex.Single class SingleExample { fun just() { val source = Single.just("Hello Single") source.subscribe { x -> println(x) } } } fun main() { val demo = SingleExample() demo.just() } 출력 Hello Single Obserable에서 Single 클래스 사용 Single은 Observable의 특수한 형태이므로 Observabl..
Observable 클래스 Observable은 데이터 흐름에 맞게 알림을 보내 구독자가 데이터를 처리할 수 있도록 합니다. RxJava1 에서는 Observable과 Single 클래스를 사용하였지만 RxJava2에서는 Observable을 세분화하여 Observable, Maybe, Flowable 클래스로 구분하여 사용합니다. Observable은 Observer 패턴을 구현합니다. Observer 패턴은 객체의 상태 변화를 관찰하는 관찰자 목록을 객체에 등록하고, 상태 변화가 있을 때마다 메서드를 호출하여 객체가 직접 목록의 각 Observer에게 변화를 알려 줍니다. Observed라는 단어가 관찰을 통해서 얻은 결과를 의미한다면 Observable은 현재는 관찰되지 않았지만 이론을 통해서 앞으..
마블 다이어그램은 전체적인 흐름도라고 보면 됩니다. 먼저 flip 다이어그램의 흐름에 대해 설명하겠습니다. 위에 있는 실선은 Observable의 시간 표시 줄이다. 시간 순으로 데이터가 발행되는 것을 표현합니다. Observable에서 발행되는 데이터는 시간 순서대로 별, 삼각형, 오각형, 원 등의 도형을 발행합니다. 데이터를 발행할 때는 onNext 알림이 발생합니다. 파이프(|)는 Observable에서 데이터 발행을 완료했다는 의미이다. onComplete 알림이 발생합니다. 아래로 내려오는 점선 화살표는 각각 함수의 입력과 출력 데이터이다. 가운데 박스는 함수를 의미합니다. flip함수는 입력 값을 뒤집는 함수여서 모양이 180도 회전이 됩니다. 아래에 있는 실선은 함수의 결과가 출력된 시간 표..