RxJava기록 - Observable

dada·2021년 12월 29일
0

RxJava

목록 보기
2/12

오늘은 Rxjava의 핵심 Observable을 공부해보려고 한다.
내용이 많은 것 같아서 단일데이터와 다중일때를 나눠서 작성!


RxJava 2.x

  • Observable, Maybe, Flowable

Observable 클래스

  • Observable은 옵서버 패턴을 구현하며, 옵서버 패턴은 객체의 상태 변화를 관찰하는 관찰자 목록을 객체 등록.

  • 상태 변화가 있을 때마다 메서드를 호출하여 객체가 직접 목록의 각 옵서버에세 변화를 알려준다.

💡Observable이 전달하는 세 가지의 알림

onNext : Observabled이 데이터의 발행을 알림
onComplete : 모든 데이터의 발행을 완료했음을 알리고, 단 한 번만 발생하며 발생한 후에는 더 이상 OnNext 이벤트가 발생해서는 안된다.
onError : 에러가 발생했음을 알리고 Observable의 실행을 종료

just() 함수

  • 인자로 넣은 데이터를 차례로 발행하려고 Observable을 생성
  • 데이터 내용을 변경하지 않고 그대로 발행

Subscribe() 함수와 Disposable 객체

Subcribe() 함수

  • Observable은 just() 등의 팩토리 함수로 데이터 흐름을 정의한 후 subscribe() 함수를 호출해야 실제로 데이터를 발행
    ⇒ 실행되는 시점을 조절할 수 있음.
  1. Subscribe()함수의 원형
    1. Disposable subscribe()
    2. Disposable subscribe(Consumer<? super T> onNext)
    3. Disposable subscribe(Consumer<? super T> onNext, Consumer<? super java.lang.Throwable> onError)
  • 인자가 없는 subscribe()함수는 onNext와 onComplete 이벤트를 무시하고 onError 이벤트가 발생했을 때만 OnErrorNotImplementedException을 던집니다(throw). 따라서 Observable로 작성한 코드를 테스트 하거나 디버깅할때 사용
  • 인자가 1개있는 오버로딩은 onNext 이벤트를 처리합니다. onError 이벤트가 발생했을 때OnErrorNotImplementedException을 던진다.(throw)
  • 인자가 2개인 함수는 onNext와 onError 이벤트를 처리.
  • 인자가 3개인 함수는 onNext, onError, onComplete 이벤트를 모두 처리.

🔦 이러한 함수 원형은 모두 Disposable 인터페이스 객체를 리턴

void dispose()

boolean isDisposed()

Disposable() 함수

  • dispose()는 Observable에게 더 이상 데이터를 발행하지 않도록 구독을 해지하는 함수
  • Observable()이 onComplete 알림을 보냈을 때 자동으로 dispose()를 호출해 Observable과 구독자의 관계를 끊음.
  • isDiosposed()를 이용하여 구독을 해지했는지 확인할 수 있음.

create() 함수

  • 개발자가 직접 OnNext, onComplete. onError같은 알림을 직접 호출해야한다.

create() 함수의 원형

Observable<T> create(ObservableOnSubscribe<T> source)

Observable<Integer> source = Observable.create(
	(Observableemitter<Integer> emitter) -> {
			emitter.onNext(100);
			emitter.onNext(200);
			emitter.onNext(300);
			emitter.onComplete();
});
source.subscribe(System.out::println);

💊 source변수는 차가운 Observable로 첫 번째 문장으로만 데이터를 발행하지 않고 subscribe를 호출했을 때 값을 발행.

**Observable.create()를 사용할 때의 주의 사항

  1. 구독 해지(dispose)되었을 때 등록된 콜백을 모두 해제해야 한다.(메모리 누수 발생할 수 있음)
  2. 구독자가 구독하는 동안 OnNext와 oncomplete 이벤트를 호출해야 한다.
  3. 에러가 발생했을 때는 오직 onError이벤트로만 에러를 전달해야 한다.
  4. 배압(back pressure)을 직접 처리해야 함.
profile
기록하기

0개의 댓글