
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..

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..

Observable RxJava의 가장 핵심적인 요소입니다. Observable은 데이터를 흐름에 맞게 만들어서 Observer에게 보내는 역할을 합니다. RxJava는 이벤트를 통한 Observer Pattern을 기반으로 만들어졌습니다. Observable 가장 기본적인 형태, N개의 데이터를 발행할 수 있습니다. onComplete를 통해 완료를 알릴 수 있으며 onError를 통해 에러를 처리할 수 있습니다. onComplete, onError가 호출되면 이후에 발행하는 onNext는 무시합니다. fun observable() { Observable.create { emitter -> emitter.onNext(1) emitter.onNext(2) emitter.onNext(3) emitter.o..

Reactive Programming 데이터의 흐름을 먼저 정의하고 데이터가 반영되었을 때 연관된 작업이 실행횐다. 즉, 이벤트에 반응하여 프로그램이 동작한다. 어떻게 이벤트를 반응할까? Observer 패턴 (이벤트 처리) Iterator 패턴 (이벤트 처리) Functional 프로그래밍 (이벤트 가공) RxJava https://reactivex.io/intro.html ReactiveX is a library for composing asynchronous and event-based programs by using observable sequences. It extends the observer pattern to support sequences of data and/or events and a..
Coroutine 동기화 문제 아래의 코드는 100개의 Coroutine을 만들고 각 Coroutine은 coutner를 1씩 증가하는 작업을 1000번 작업한다. 하지만 결과를 확인하면 우리의 예상대로 나오지 않는다. 그 이유는 Coroutine의 Dispatcher는 내부적으로 Thread Pool을 통해 Multi Thread 환경에서 작동한다. 즉 동기화 작업을 처리하지 않았기 때문에 오류가 발행한다. Dispatchers.Default는 JVM에 설정된 만큼 Thread Pool을 갖습니다. 보통 CPU 수와 같으며 최소 2개를 갖습니다. import kotlinx.coroutines.* import kotlin.system.measureTimeMillis suspend fun massiveRu..
Supervision Coroutine에서 Exception이 발생한 경우 Exception이 전파되면서 다른 자식들의 Coroutine을 취소시키고, 부모까지 취소시킨다. 하지만 여러 Coroutine에서 API를 호출하여 UI를 업데이트 하는 작업을 생각해보자. 하나의 API가 실패한 경우 모든 Coroutine이 취소되면서 다른 작업까지 영향을 미친다. 이러한 문제점을 해결하기 위한 방법이 Supervision이다. SupervisionJob 일반적인 Job과 비슷하지만 Exception이 아래 방향으로만 전달된다. 즉 Exception이 발생했을 때 다른 자식들이나 부모의 Coroutine을 취소하지 않고 자신과 자신의 자식들의 Coroutine만 취소한다. SupervisionJob은 매개변수로..
- Total
- Today
- Yesterday
- CancellationException
- 보이스카우트 규칙
- Exception
- 코루틴
- isActive
- Android
- Coroutine
- Flutter
- ConcatAdapter.Config
- viewmodel
- ConcatAdapter
- 함수
- commit
- rxjava
- ViewModelStoreOwner
- git
- Flowable
- 연산자
- 클린 코드
- gradle
- 클린코드
- clean code
- Widget
- null
- DART
- observable
- TDD
- ViewModelProvider
- Kotlin
- DSL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |