·💤 RxJava
구독시점과 발행시점에 주의해서 Hot & Cold Observable에 대해 살펴보자. 1. Cold Observable Cold Observable은 구독시에 데이터 발행을 시작한다. 옵저버가 구독할 때마다 새로운 데이터 스트림을 시작하고 처음부터 데이터를 방출한다. 이것은 옵저버가 Cold Observable을 구독할 때마다 독립적인 데이터 스트림을 생성하고 발행하는 것을 의미한다. 아래의 예시는 interval 연산자를 이용하여 1초마다 아이템을 발행하는 Cold Observable 이다. 아래는 두 개의 구독자가 있다. 첫 번째 구독자가 구독을 시작하고 3초후 두 번째 구독자가 구독을 시작한다. val ob = Observable.interval(1, TimeUnit.SECONDS) ob.subs..
·💤 RxJava
RxJava2부터는 다양한 타입의 Observable을 사용할 수 있다. Observable과 Single은 RxJava 1버전부터 존재했고 Maybe와 Completable은 그 이후에 등장했다. 때문에 현재 Rx 공식문서에도 Observable과 Single 타입만 설명이 있다. 필자도 사실상 Observable 원형 그대로 먼저 실무에서 사용한 것이 아니라 이렇게 변형된 타입들부터 익힌 경우이다. Single, Maybe Completable 세 가지에 대해 다뤄보고자 한다. Observable can emit multiple items Single, Maybe and Completable are one or no emission of items. Single it always either emit..
·💤 RxJava
0. Observable, 그래서 어떻게 쓰이는데? Observable은 다양한 종류의 이벤트나 데이터를 비동기적으로 방출할 수 있는 객체이다. Observable은 데이터 스트림을 나타내며, 이 Observable이 방출하는 이벤트나 데이터는 다양할 수 있는데 어떤 경우에 쓰이는지 살펴보자. 버튼 클릭 이벤트: 사용자가 화면의 버튼을 클릭할 때 마다 Observable은 클릭 이벤트를 방출할 수 있다. 네트워크 요청 결과: 네트워크 요청을 통해 데이터를 받아올 때, Observable은 이 데이터를 방출할 수 있다. 비동기적인 HTTP 요청과 같은 작업에 유용하다. 타이머 또는 주기적인 작업: 일정 시간 간격으로 이벤트를 방출하는 Observable을 생성할 수 있다. 예를 들어, 1초마다 현재 시간을..
·💤 RxJava
Observable 특집으로 Observable의 생성과 종류까지 다뤄보고자 한다. 그 전에 Reactive Programming에 대해 정리한 글이 있는데 옵저버 패턴부터 다시 짚어보고자 한다. 0. Observable 관찰할 수 있는 데이터 스트림 관찰할 수 있는 데이터 스트림을 Rx에서는 Observable 이라고 부른다. 이 데이터 스트림을 관찰하는 Observer들은 Observable이 발행하는 데이터 스트림을 구독하여 데이터를 구독하고 처리한다. 이는 옵저버 패턴을 따른 것으로 옵저버 패턴은 관찰할 수 있는 대상의 상태가 변하면 이를 관찰하는 대상에게 알려주는 구조이다. 쉬운 예시로, 식당 예약을 관리하는 애플리케이션이 있다고 하자. 예약하고 싶었던 식당이 이미 인원이 다 차버려 예약할 수 ..
·💤 RxJava
subscribe 이후 onError로 빠지는 에러를 핸들링하는 중 다시 API 호출을 할 경우가 생겨 onError 안에서 다시 구독을 한 경우가 생겼다. 이 경우 괜찮은 처리일까? stackoverflow 의 답변을 보고 다시 한 번 reactive programming 그리고 functional programming 의 원리 원칙을 기억하기 위해 남기는 글 it is not good to call a subscribe inside a subscribe. Why? Well because this is not how functional programming is supposed to work. You're not thinking functionally you're thinking procedurally..
·💤 RxJava
Scheduler로 Multi Thread 관리하기 Rx를 이용하면 여러 스레드를 사용해 어떤 작업을 수행하는 도중에도 다른 작업을 실행하는 비동기작업을 할 수 있다. Rx에서는 비동기 처리를 수행하는데 필요한 API를 제공하므로 기존에 구축한 비즈니스 로직에 영향을 주지 않고도 데이터를 통지하는 생산자 측의 처리와 데이터를 받는 측의 처리를 분리하며 서로 다른 스레드에서 실행할 수 있다. 즉 생산자가 무엇을 하더라도 소비자가 받은 데이터의 범주에서만 작업을 하게 된다면 비동기로 쉽게 전환하며 교체할 수 있다. 또한 용도별로 적절히 스레드를 관리하는 클래스를 제공해 직접 스레드를 관리해야 하는 번거로움도 없다는 편리함이 있다. Rx에서 제공해주는 operator들을 적절히 사용하여 스레드 관리를 해보자...
·💤 RxJava
서버 응답을 받는 도중 통신 모델로 선언한 프로퍼티 값의 타입을 잘못 지정했는데도 통신에 성공하고, 프로퍼티 값에 접근하는데까지 에러가 나지 않았던 경우를 마주했다. Retrofit이 ConverterFactory에서 에러를 잡아주는 것인지 Retrofit과 같이 쓰고 있는 Rxjava Error Handling 클래스에서 에러를 흘려주는 것인지 궁금증에서 시작된 이번 글은 Retofit 부터 RxJava, 직렬화와 역직렬화까지 마인드맵처럼(..) 알아본다. 1. Retrofit Retrofit은 HTTP API를 자바 인터페이스 형태로 변환해 안드로이드 개발 시 API를 쉽게 호출할 수 있도록 지원하는 라이브러리이다. 서버와 응답하는 데이터 형식은 JSON 형식이기에 Retrofit에서 Call 객체 ..
안드로보이
'💤 RxJava' 카테고리의 글 목록