본문 바로가기
Develop

RxJava 프로그래밍3

by _dreamgirl 2020. 7. 20.
반응형

 

제 7장, 디버깅과 예외 처리

 

디버깅

  • doOnNext, doOnComplete, doOnError 함수
  • doOnEach 함수 : notification<T> 객체를 전달받아서 이벤트별로 처리
  • doOnSubscribe, doOnDispose, doOnLifeCycle(doOnSubscribe, doOnDispose 모두 호출)
  • doOnTerminate : onComplete or OnError 이벤트 발생 직전에 실행하는 함수 

 

예외처리

  • onErrorReturn : 예외 발생이 예상되는 부분을 선언하여 처리. Observable을 생성하는 측과 구독하는 측이 서로 다를 수 있다는 점에서 구독자는 Observable에서 발생할 수 있는 예외를 구독한 이후에 모두 파악하기가 어려움. Observable을 생성하는 측에서 발생할 수 있는 예외처리를 해두면 구독자는 선언된 예외 상황을 보고 그에 맞는 처리 가능 
  • onErrorResumeNext : 에러가 발생했을 때 내가 원하는 Observable로 대체하는 방법
  • retry : 예외가 발생할 때 다시 재구독 하게 됨. 통신 실패시 재시도와 같은 처리할 때, 재시도 횟수를 지정하거나 어떤 조건에서 재시도 할 것인지 다양한 오버로딩이 제공
  • retryUntil : 재시도를 중단할 조건이 발생할 때까지 계속 재시도
  • retryWhen : 재시도 조건을 동적으로 설정해야 하는 복잡한 로직을 구현할 때 활용

 

흐름제어 

  • Observable이 데이터를 발행하는 속도와 옵서버가 데이터를 받아서 처리하는 속도 사이의차이가 발생할 때 사용하는 함수
  • Sampel, buffer, throttle, window, debounce 함수 등 제공
  • Sample : 특정한 시간 동안 가장 최근에 발행된 데이터를 걸러주는 함수
  • Buffer : 일정 시간 동안 데이터를 모아두었다가 한꺼번에 발행
  • throttleFirst, throttleLast : 주어진 조건에서 가장 먼저 입력된 값을 발행, 가장 나중에 입력된 값을 발행
  • Window : groupBy와 비슷한, 특정 조건에 맞는 입력값들을 그룹화하여 Observable을 생성. 
  • Debounce : 빠르게 연속 이벤트를 처리하는 흐름 제어 함수

 

제 8장, 테스팅과 Flowable

  • 테스트 주도 개발 TDD : JUnit, xUnit
  • 이클립스에서 지원, Junit5는 IntelliJ 지원
  • @DisplayName을 통해 테스트케이스 ID을 적어두면 실무에서 사용할 때에도 편리 
  • TestObserver 
  • assertResult, assertFailure, assertFailureAndMessage, awaitDone, 
  • assertComplete, assertNotComplete

 

  • Gradle 빌드 소스는 /src/main/java, 테스트 코드는 /src/test/java
  • 테스트 코드에 해당하는 dependency로는 testCompile, testRuntime 등이 있음
  • JUnit은 라이프 사이클이 있음

 

  • @Disabled를 활용하여 테스트 코드 비활성화하기
  • Flowable 클래스 : Observable 클래스의 성능을 향상시키기 위해 만든 클래스. 배압의 차이가 있음
  • 데이터의 발행과 처리 속도가 차이가 나는걸 해결하기 어려울 때는 Flowable 사용 권장
  • onBackPressureBuffer, onBackpressureDrop, onBackpressureLastest 배압 이슈를 해결하는 버퍼 만들기 함수
  • 근본적인 해결은 sample, debounce 함수와 같은 흐름 제어 함수를 이용하는 것이다.
반응형

댓글