
RxJava 예외 처리 기본적으로 Observer의 onError 함수를 통해서 에러를 처리할 수 있습니다. onError로 에러를 처리하는 경우 스트림은 데이터 발행을 중단하며 Observer는 onComplete 호출을 하지 못합니다. fun onError() { Observable.create { emitter -> emitter.onNext("Message 1") emitter.onNext("Message 2") throw Exception("Something Wrong") }.subscribe({ println(it) }, { println("Error : $it") }) } Message 1 Message 2 Error : java.lang.Exception: Something Wrong Rx..
뭔가 잘못될 가능성은 늘 존재한다. 뭔가 잘못되면 바로 잡을 책임은 우리 프로그래머에게 있다. 깨끗한 코드와 오류 처리는 확실히 연관성이 있다. 상당수 코드 기반은 전적으로 오류 처리 코드에 좌우된다. 여기저기 흩어진 코드 때문에 실제 코드가 하는 일을 파악하기가 어려워지게 된다. 오류 처리는 중요하다. 하지만 오류 처리 코드로 인해 프로그램 논리를 이해하기 어려워진다면 깨끗한 코드라 부르기 어렵다. 이 장에서는 우아하고 고상하게 오류를 처리하는 기법과 고려 사항 몇 가지를 소개한다. 오류 코드보다 예외를 사용하라 예전에는 예외를 지원하지 않는 프로그래밍 언어가 많았다. 그렇기 때문에 오류 플래그를 설정하거나, 오류 코드를 반환하는 방법이 전부였다. 예외를 사용하는 대신 오류 코드를 사용하면 코드가 훨씬..

Subject(링크) Subject는 데이터 발행과 구독을 한번에 할 수 있는 클래스입니다. onNext, onError, onComplete 함수로 데이터를 발행할 수 있으며, subscribe 함수로 데이터 구독을 할 수 있습니다. fun subject() { val subject = PublishSubject.create() subject.subscribe { println(it) } subject.onNext(1) subject.onError(Exception()) subject.onComplete() } AsyncSubject Subject에서 마지막으로 발행한 데이터만 받아옵니다. 완료되기 전 발행한 데이터는 무시합니다. 만약 오류가 발생하면 아무 값도 발행하지 않고 오류를 보냅니다. fun ..

Scheduler Scheduler는 RxJava에서 어떤 쓰레드에서 실행될지 결정하는 역할을 합니다. 단순히 Observable를 만든다고 비동기 실행이 되는 것이 아닌, Scheduler를 적절히 사용해야 비동기로 실행할 수 있습니다. Scheduler를 사용하지 않은 경우 Observable를 만들지만 내부적으로 같은 쓰레드를 사용하기 때문에 순차적으로 실행된다. fun schedulerTest1() { Observable.create { Thread.sleep(1500L) it.onNext(100) }.subscribe { println("subscribe : $it") } println("Finish") Thread.sleep(3000L) } subscribe : 100 Finish Schedu..
자료 추상화 public class Point { public double x; public double y; } 확실히 직교좌표계를 사용한다. 개별적으로 좌표값을 읽고 설정하게 강제한다. public interface Point { double getX(); double getY(); void setCartesian(double x, double y); double getR(); double getTheta(); void setPolar(double r, double theta); } 직교좌표계를 사용하는지 극좌표계를 사용하는지 알 길이 없다. 좌표를 읽을 때 각 값을 개별적으로 읽어야 한다. 좌표를 설정할 때는 두 값을 한꺼번에 설정해야 한다. 그저 조회 함수와 설정 함수로 변수를 다룬다고 클래스가 ..

Observable 데이터 소비와 상관없이 데이터를 계속 발행합니다. fun observableTest() { Observable.range(1, 10000) .doOnNext { println("emit : $it") } .observeOn(Schedulers.io()) .subscribe { Thread.sleep(100L) println("comsume : $it") } Thread.sleep(100000) } emit : 1 emit : 2 emit : 3 ... emit : 9998 emit : 9999 emit : 10000 comsume : 1 comsume : 2 comsume : 3 ... Flowable Flowable은 Observable과 다르게 Backpressure를 지원하며,..
Cold Observable Cold Observable은 Observable를 생성하고 Observer가 subscribe를 호출할 때 데이터 발행을 시작합니다. 즉, Observer가 없으면 데이터를 발행하지 않습니다. 다른말로 Lazy하게 데이터를 발행한다고 표현합니다. 일반적으로 One Time 질의(DB 조회, API 호출, File IO 등)에 사용하고, 원하는 시점에 요청하여 결과를 받아오는 작업에 쓰입니다. * 지금까지 예시로 사용했던 Single, Maybe 등이 Cold Observable에 속합니다. Hot Observable Cold와 반대로 Observable를 생성하면 Observer 유무의 상관없이 데이터를 발행합니다. 중간에 Observer가 등록되어 subscribe를 시작..

Operator 데이터 스트림을 쉽게 변형하기 위해 Operator를 사용합니다. Collections에서 제공하는 forEach, map 같은 Operator뿐만 아니라 Rx에서 추가적으로 제공하는 debounce, buffer 같은 함수들이 있습니다. https://reactivex.io/documentation/operators.html ReactiveX - Operators Introduction Each language-specific implementation of ReactiveX implements a set of operators. Although there is much overlap between implementations, there are also some operators th..
- Total
- Today
- Yesterday
- 클린코드
- Kotlin
- ConcatAdapter
- commit
- 클린 코드
- rxjava
- gradle
- clean code
- observable
- 연산자
- ConcatAdapter.Config
- 보이스카우트 규칙
- 코루틴
- TDD
- Widget
- ViewModelStoreOwner
- Exception
- Coroutine
- Android
- 함수
- DART
- Flutter
- git
- CancellationException
- ViewModelProvider
- isActive
- null
- DSL
- Flowable
- viewmodel
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |