본문 바로가기

안드로이드/RxAndroid(RxJava)

(5)
[RxJava] Scheduler Scheduler RxJava는 Scheduler를 통해 멀티 스레드와 같은 비동기 작업을 돕는다. Schedulers 클래스에서 제공하는 정적 팩토리 메서드로 설정할 수 있다. 종류 IO 네트워킹, DB, 파일 시스템 등의 블로킹 이슈가 발생하는 곳에서 비동기적인 작업을 위해 사용한다. newThread 매번 배로운 스레드를 생성하여 작업한다. Computation 단순 반복적인 작업, 콜백 처리 그리고 다른 계산적인 작업에 사용된다. 블로킹 이슈가 존재하는 곳에서는 사용하지 않는다. Trampoline 현재 스레드에 무한한 크기의 큐를 생성하여 모든 작업을 순차적으로 처리하는 것을 보쟝한다. mainThread RxAndroid에서 제공하는 스케줄러로 안드로이드의 메인 스레드에서 작동한다. subsc..
[RxJava] Disposable Disposable 저번까지의 포스트에서 Observable 객체에서 발행할 아이템을 정의하고 subcribe()를 통해 스트림을 생성하고 아이템을 발행했다. 사실, subscribe()를 호출한 후에는 Disposable 객체가 반환된다. Observable source = Observable.just(1,2,3); Disposable disposable = source.subsribe(o -> System.out.println(source)); 유한개의 아이템을 발행하는 Observable의 경우 onComplete() 호출로 안전하게 종료된다. 하지만 아이템을 끝없이 발행하거나 오랫동안 실행되는 경우 제대로 종료되지 않는다면 메모리 릭(leak)이 발생할 수 있다. 따라서, 명시적인 폐기가 필요하다..
[RxJava] Cold Observable과 Hot Observable Cold Observable Cold Observable은 이전 포스팅에서 다룬 것과 같이 Observable에 subscribe를 요청하면 아이템을 발행하기 시작한다. 아이템은 처음부터 끝까지 발행되고, 임의로 종료시키지 않는 이상 여러 번의 요청에도 처음부터 끝까지 발행하는 것을 보장한다. 다음은 interval을 통해 1초마다 아이템을 발행하는 예시이다. Observable src = Observable.interval(1, TimeUnit.SECONDS); src.subscribe(value -> System.out.println("First: " + value)); Thread.sleep(3000); src.subscribe(value -> System.out.println("Second: " ..
[RxJava] Observable Observable RxJava에서는 Observable을 구독(subscribe)하는 Observer가 존재하고, Observable이 순차적으로 발행하는 데이터에 대해서 반응한다. Observable은 다음 3가지 이벤트를 통해 동작한다. onNext(): 하나의 소스 Observable에서 Observer까지 한 번에 하나씩 순차적으로 데이터를 발행 onComplete(): 데이터 발행이 끝났음을 Observer에게 알려 onNext()이 더 이상 발생하지 않음을 알림 onError(): 오류가 발생했음을 Observer에 알림. 위에서 데이터 발행 과정에서 null은 발행 불가능하다. 그리고, 위 세가지 이벤트는 Emitter 인터페이스에 선언된다. 핵심: 이벤트를 만들어내는(emit) 주최. 즉..
[RxJava] 반응형 프로그래밍 반응형 프로그래밍(Reactive Programming) 최근 안드로이드 개발자 모집 공고를 보면 우대사항으로 'RxJava 사용 경험'이 많이 존재한다. 리액티브 프로그래밍이랑 기존 명령형(절차형) 프로그래밍과는 달리 데이터와 같은 주변 환경의 변화를 캐치하여 동작하는 프로그래밍 방식이다. 반응형 프로그래밍의 예시 반응형 프로그래밍은 모든 데이터를 '스트림(Stream)'으로 처리하며, 하나의 데이터 흐름은 다른 데이터 흐름으로 변형되거나 여러 데이터 흐름이 하나의 흐름으로 변경될 수도 있다. public void rxFun(){ PublishSubject items = new PublishSubject.create(); items.onNext(10); items.onNext(15); items.onN..