BackEnd/RxJava
-
테스트(2)BackEnd/RxJava 2023. 7. 16. 10:00
TestSubscriber / TestObserver 테스트 용도로 사용되는 소비자 클래스로 TestSubscriber는 Flowable에서, TestObserver는 Observable에서 사용합니다. assertXXX 함수를 이용해 통지된 데이터를 검증할 수 있습니다. awaitXXX 함수를 이용해 지정된 시간 동안 대기하거나 완료 또는 에러 이벤트가 발생할 때까지 대기할 수 있습니다. 완료, 에러, 구독 해지 등의 이벤트 발생 결과 값을 이용해서 데이터를 검증할 수 있습니다. assertEmpty 테스트 시점까지 통지받은 데이터가 없다면 테스트에 성공합니다. Observable.empty()로 생성 시 완료를 통지하기 때문에 테스트가 실패합니다. 즉, 통지 이벤트 자체가 없는지를 테스트 할 수 있습..
-
테스트(1)BackEnd/RxJava 2023. 7. 16. 07:00
비동기 처리 결과를 테스트하려면 현재 쓰레드에서 호출 대상 쓰레드의 실행 결과를 반환 받을 때까지 대기할 수 있어야 합니다. RxJava에서는 현재 쓰레드에서 호출 대상 쓰레드의 처리 결과를 받을 수 있는 blockingXXX 함수를 제공합니다. Observable에서 통지되고 가공 처리된 결과 데이터를 현재 쓰레드에 반환하므로, 반환된 결과 값과 예상되는 기대값을 비교해서 단위 테스트를 수행할 수 있습니다. blockingFirst 생산자가 통지한 첫번째 데이터를 반환합니다. 통지된 데이터가 없을 경우 NoSuchElementException을 발생시킵니다. package com.itvillage.section03; import com.itvillage.common.Car; import org.juni..
-
디버깅(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..