본문 바로가기

Android/RxJava14

RxJava (8) - Observable 결합하기 Observable 결합하기여러 개의 Observable 데이터 스트림을 하나의 Observable로 만들 수 있다. 여러 데이터를 이용하여 가공해서 사용하는 경우, 혹은 HTTP 통신의 응답들을 한 번에 묶어서 받고 싶은 경우 등에 사용하게 된다. 이번 포스팅에선 이러한 동작을 하는 Observable 결합 연산자들 중 몇 가지를 알아보고자 한다. 설명만 들어서는 헷갈릴 수 있는 파트다. 마블 다이어그램과 예제 소스코드를 함께 보며 천천히 이해해보자.  conbineLast() 메소드해당 메소드는 두 Observable 중 하나에서 데이터를 발행하려고 할 때, 나머지 한 Observable이 가장 최근에 발행한 데이터를 가져와 지정해준 함수를 거쳐 새로운 하나의 데이터로 발행하게 한다.fun main(.. 2023. 6. 18.
RxJava (7) - Observable 필터링하기 Observable 필터링하기필터링 연산자는 Observable이 뱉는 데이터들을 어떤 기준에 의해 거른 후 발행하도록 한다. 이번 포스팅에선 Observable 필터링 연산자 중 자주 사용되는 몇 가지를 알아보며, 개념을 익혀보도록 하자. debounce() 메소드이 녀석은 특정 시간동안 더 이상 데이터가 발행되지 않을 때에 데이터를 발행하는 연산자이다.예를 들어 검색창 입력필드에 사용자가 검색어를 입력할 때 검색버튼 누르지 않아도 검색이 되는 기능을 구현한다고 치자. 이 때 검색어가 변화하는 대로 계속하여 서버에 쿼리 (혹은 DB 쿼리)를 보내게 된다면 리소스 낭비이다.왜냐하면 '사과'라는 키워드를 완성하기 위해 사용자는 'ㅅ -> 사 -> 사ㄱ -> 사고 -> 사과'의 과정을 거치기 때문에 총 5번.. 2023. 6. 18.
RxJava (6) - Observable 변형하기 Observable 변형해보기observable을 변형한다 함은, 데이터를 특정 형태로 변형하여 발생하는 것이다. 어떤 비동기 기능을 개발할 때 상황에 따라 알맞은 형태로 반환받고 싶어질 때가 있다. 이럴 때를 대비하여 이번 포스팅에서는, Observable을 변형하는 다양한 연산자들에 대해 알아보자.  buffer() 메소드우리는 버퍼라는 단어 자체를 많이 본 적이 있고, 대략 어떤 역할을 하는 녀석인지도 알고 있다. buffer() 메소드 역시 비슷한 동작을 하게 된다. 아래 코드를 통해 동작을 이해해보자.fun main() { Observable.range(0, 8) .buffer(3) .subscribe { println("마! 이게 버퍼다!") .. 2023. 6. 18.
RxJava (5) - Cold Observable vs Hot Observable Cold vs Hot ObservableObservable은 Cold Observable과 Hot Observable로 나눌 수 있는 차이는 요약하자면 이렇다.Cold Observable: 생성된 이후 누군가 구독을 요청했을 때 '처음부터' 데이터 발행Hot Observable: 데이터 발행 시작한 이후 모든 구독자들에게 '같은' 데이터 발행 Cold OverservableCold Observable은 일반적인 옵저버 형태로, 누가 구독해주지 않으면 데이터를 배출해주지 않는 것을 원칙으로 한다.즉, Observable에 '구독' (subscribe)을 요청했을 때 데이터를 발행하기 시작한다. 즉, 누군가 구독을 하지 않으면 데이터를 발행하지 않는다. 또한 데이터를 처음부터 끝까지 발행하는 것을 보장한다... 2023. 6. 18.
RxJava (4) - Single, Maybe, Completable 다양한 Observable의 형태Observable 스트림 외에도 Single, Maybe, Complete처럼 특별한 스트림이 있다.  Single개념Single(싱글)은 Observable과 비슷하지만, 여러 개의 데이터를 발행할 수 있는 Observable과 달리 한 개의 데이터(혹은 에러)만을 발행한다.Observable은 3가지 알림(onNext(), onError(), onComplete())을 보내는 반면, Single은 onSuccess, onError 2가지의 알림으 보낼 수 있다.한개의 데이터(혹은 에러)만 발행하기 때문에 onNext(), onComplete() 대신 onSuccess()를 사용해 데이터 발행이 완료됨을 알려준다. 오류 처리는 Observable의 Emitter와 동일.. 2023. 6. 18.
RxJava (3) - Disposable 다뤄보기 subscribe()의 비밀내용을 상기시켜보다. 우리는 subscribe()를 통해 Observable 데이터 스트림을 구독해볼 수 있었다. 그런데 이를 실험해본 사람이 있는지 모르겠는데, subscribe()는 사실 Disposable이라는 객체를 반환하기도 한다. 아래와 같이, Observable을 subscribe()로 구독하면, Disposasble 객체를 리턴받아 할당할 수 있다.fun main() { val stream: Observable = Observable.just("H43RO", "Velog", "Rx") val disposable: Disposable = stream.subscribe(System.out::println)}그럼 이녀석은 어디다 사용하는 것일까?  Dispo.. 2023. 6. 18.