전체 글
-
디버깅(Debugging)BackEnd/RxJava 2023. 7. 15. 07:00
RxJava 프로그래밍은 데이터를 생성 및 통지하고 이를 구독하여 처리하는 과정이 하나의 문장으로 되어 있습니다. 즉, RxJava 프로그래밍은 선언적 프로그래밍 방식이기 때문에 데이터의 상태 변화를 확인하기 위한 디버깅이 쉽지 않습니다. 또한, RxJava 프로그래밍은 여러 쓰레드가 동시에 실행되는 비동기 프로그래밍이기 때문에 실행 시 항상 같은 결과가 나온다는 보장을 할 수 없습니다. 이러한 문제점을 해결하기 위해 RxJava에서는 doXXX로 시작하는 함수를 통해 생산자나 소비자쪽에서 이벤트 발생 시 로그를 기록할 수 있는 방법을 제공합니다. 따라서 소비자가 전달 받은 데이터를 처리하기 전 원본 데이터의 상태나 변환 및 필터링 등으로 가공되는 시점의 데이터 상태를 doXXX 함수를 통해 쉽게 파악할..
-
스케쥴러(Scheduler)BackEnd/RxJava 2023. 7. 15. 05:00
스케쥴러(Scheduler) RxJava에서의 스케쥴러는 RxJava 비동기 프로그래밍을 위한 쓰레드(Thread) 관리자입니다. 즉, 스케쥴러를 이용해서 어떤 쓰레드에서 무엇을 처리할 지에 대해 제어할 수 있습니다. 스케쥴러를 이용해서 데이터를 통지하는 쪽과 데이터를 처리하는 쪽 쓰레드를 별도로 지정해서 분리할 수 있습니다. RxJava의 스케쥴러를 통해 쓰레드를 위한 코드의 간결성 및 쓰레드 관리의 복잡함을 줄일 수 있습니다. RxJava에서 스케쥴러를 지정하기 위해서 subscribeOn(), observeOn() 유틸리티 연산자를 사용합니다. 생산자쪽의 데이터 흐름을 제어하기 위해서는 subscribeOn() 연산자를 사용하고, 소비자쪽에서 전달받은 데이터 처리를 제어하기 위해서는 observeO..
-
SubjectBackEnd/RxJava 2023. 7. 14. 07:00
Processor vs Subject Processor Reactive Streams에서 정의한 Publisher 인터페이스와 Subscriber 인터페이스를 둘 다 상속한 확장 인터페이스입니다. 즉, Publisher(생산자)의 기능과 Subscriber(소비자)의 기능을 모두 가지고 있습니다. Hot Publisher(뜨거운 생산자)입니다. Note) Hot Publisher vs Cold Publisher Hot Publisher: 소비자는 구독한 시점의 타임라인부터 통지된 데이터를 받을 수 있습니다. Cold Publisher: 소비자는 구독할 때마다 타임라인의 처음부터 모든 데이터를 받을 수 있습니다. Subject Reactive Streams의 Processor와 동일한 기능을 하나 배압 기..
-
집계 연산자BackEnd/RxJava 2023. 7. 13. 07:00
count Observable이 통지한 데이터의 총 개수를 통지합니다. 총 개수만 통지하면 되므로 결과값은 Single로 반환합니다. 데이터의 총 개수를 통지하는 시점은 완료 통지를 받은 시점입니다. package com.itvillage.chapter05.chapter0509; import com.itvillage.common.SampleData; import com.itvillage.utils.LogType; import com.itvillage.utils.Logger; import io.reactivex.Observable; /** * count를 이용하여 차량의 총 대수를 계산하는 예제 */ public class ObservableCountExample01 { public static void ..
-
조건과 불린 연산자BackEnd/RxJava 2023. 7. 13. 05:50
all 통지되는 모든 데이터가 설정한 조건에 맞는지를 판단합니다. 결과값을 한번만 통지하면 되기 때문에 true/false 값을 Single로 반환합니다. 통지된 데이터가 조건에 맞지 않는다면 이후 데이터는 구독 해지되어 통지 되지 않습니다. package com.itvillage.chapter05.chapter0508; import com.itvillage.common.CarMaker; import com.itvillage.common.SampleData; import com.itvillage.utils.LogType; import com.itvillage.utils.Logger; import io.reactivex.Observable; /** * all을 이용하여 통지된 모든 데이터가 파라미터로 입력..
-
유틸리티 연산자BackEnd/RxJava 2023. 7. 9. 07:00
delay (1) 생산자가 데이터를 생성 및 통지를 하지만 설정한 시간만큼 소비자쪽으로의 데이터 전달을 지연시킵니다. package com.itvillage.chapter05.chapter0507; import com.itvillage.utils.LogType; import com.itvillage.utils.Logger; import com.itvillage.utils.TimeUtil; import io.reactivex.Observable; import java.util.concurrent.TimeUnit; /** * 통지된 데이터를 소비자 쪽에서 전달 받는 시간을 일정 시간동안 지연 시키는 예제 */ public class ObservableDelayExample01 { public static v..
-
에러 처리 연산자BackEnd/RxJava 2023. 7. 8. 08:00
RxJava에서는 아래와 같이 try ~ catch 문을 사용할 수 없습니다. 아래 코드를 실행하면 catch 에서 Exception을 잡지 못하고 예외가 발생하는 것을 확인할 수 있습니다. package com.itvillage.chapter05.chapter0506; import com.itvillage.utils.LogType; import com.itvillage.utils.Logger; import com.itvillage.utils.TimeUtil; import io.reactivex.Observable; import java.util.concurrent.TimeUnit; public class CanNotUseTryCatchExample { public static void main(Stri..
-
결합 연산자BackEnd/RxJava 2023. 7. 8. 07:00
merge 다수의 Observable에서 통지된 데이터를 받아서 다시 하나의 Observable로 통지합니다. 통지 시점이 빠른 Observable의 데이터부터 순차적으로 통지되고, 통지 시점이 같을 경우에는 merge() 함수의 파라미터로 먼저 지정된 Observable의 데이터부터 통지됩니다. package com.itvillage.chapter05.chapter0505; import com.itvillage.utils.LogType; import com.itvillage.utils.Logger; import com.itvillage.utils.TimeUtil; import io.reactivex.Observable; import java.util.concurrent.TimeUnit; /** * 두개..