목록스터디/RxJava2 (39)
올해는 머신러닝이다.
AsyncSubjectAsyncSubject는 소스 Observable로부터 배출된 마지막 값(만)을 배출하고 소스 Observable의 동작이 완료된 후에야 동작한다. (만약, 소스 Observable이 아무 값도 배출하지 않으면AsyncSubject역시 아무 값도 배출하지 않는다.)즉 쉽게 말하자면 onCompleted를 하기전 이벤트만 배출이 된다는 것이다. onCompleted가 호출이 되지 않으면 배출이 되지 않는다.io.reactivex.subjects.Subject subject = AsyncSubject.create(); subject.subscribe( v -> System.out.println("Observer 1: " + v) , Throwable::printStackTrace, ()..
ReplaySubject이전 시간에 공부한 replay() , cache() 기능을 기억하는가.이전에 배출한 모든 걸 캐싱해서 새로운 Observer등록시 캐싱된걸 다시 배출시키는 역할이다.ReplaySubject는 그 기능을 가진 Subject이다.즉 다시 말하자면 PublishSubject후에 .cache() 을 붙였다고 보면 된다.//ReplaySubject 선언 io.reactivex.subjects.Subject subject = ReplaySubject.create(); subject.subscribe( v -> System.out.println("Observer 1: " + v)); subject.onNext("Alpha"); subject.onNext("Beta"); subject.onNe..
BehaviorSubject주로 많이 쓰이는 subject중 하나이다.기능은 최근 마지막껄 캐싱해서 보여주는 subject이다.이전 시간에 배운 replay() , autoConnect() 을 기억하는가?이 BehaviorSubject는 이 2가지 기능들을 통합해놓은 거라고 보면된다.즉 PublishSubject후에 replay(1).autoConnect() 를 통합한 Subject 이다.그럼 예제를 한번 보자.//BehaviorSubject 선언 io.reactivex.subjects.Subject subject = BehaviorSubject.create(); subject.subscribe( v -> System.out.println("Observer 1: " + v)); subject.onNext..
PublishSubject통상 일반적인 subject 형태이다.onNext() , onComplete() , onError() 를 호출해서 사용이 가능하다.그럼 예로 보자.io.reactivex.subjects.Subject subject = PublishSubject.create(); subject.map(String::length) // 문자길이를 리턴하고 있다. .subscribe(System.out::println); subject.onNext("Alpha"); subject.onNext("Beta"); subject.onNext("Gamma"); subject.onComplete(); ........... 5 4 5 간단한 기본 형태라 어렵지는 않다.onComplete() 를 하는 순간 더이상 ..
Replay와 Caching멀티 캐스팅을 사용하면 여러 Observer 들 사이에서 공유되는 값을 캐시 할 수 있습니다.우선 Replay를 보자.이미 많은 예제사이트들을 보셨을 수도 있지만 이전에 배출한 값을 캐싱해서 가지고 있다가 새롭게 배출시 캐싱한 걸 같이 먼저 배출해준다.예제를 보자.Observable threeRandoms = Observable.interval(1,TimeUnit.SECONDS) .replay() .autoConnect(); //Observer 1 배출 threeRandoms.subscribe( i->System.out.println("Observer 1 : " + i)); sleep(3000); // 3초동안 잠자기 //Observer 2 배출 threeRandoms.subs..
refCount() 는 autoConnect(1) 와 유사하다.그럼 autoConnect와 refCount와 차이점은 무엇일까?차이점은 더이상 배출할 Observer가 없을시 refCount는 자동으로 자신을 해지를 하고 다시 새로운 Observer 이 오면 처음부터 자동으로 시작을 한다.autoConnect는 동작이 끝나면 dispose 가 되지만 다시 새로운게 오면 시작을 하진 않는다.Observable threeRandoms = Observable.interval(1,TimeUnit.SECONDS) .publish() .refCount(); //Observable 1 배출 threeRandoms.take(5).subscribe( i->System.out.println("Observer 1 : " +..
앞에서 본 예제처럼 connect() 를 통해 동시 실행할 수 있다.하지만 자동으로 connect를 할수도 있다.주의 할 내용은 자동 연결(Auto connection) 은 사용할 때 상당한 주의를 요한다. 뜻하지 않게 배출시 제대로 되지 않는 경우가 발생될 수 있기 때문이다.그럼 예제를 살펴보자 .이전장에서 했던 2가지 서로 다른 배출 방법에 자동 연결만 추가한 부분이다.Observable threeRandoms = Observable.range(1,3) .map(i->randomInt()) .publish() .autoConnect(2); //2번에 대해서 자동 연결을 하겠다는 뜻이다.!! //Observable 1 배출 threeRandoms.subscribe( i->System.out.printl..
기본적인 Observable 생성 후 배출은 다음과 같습니다.Observable threeIntegers = Observable.range(1 , 3); threeIntegers.subscribe( i -> System.out.println("Observer 1 : " + i)); threeIntegers.subscribe( i -> System.out.println("Observer 2 : " + i)); -------------------------- Observer 1 : 1 Observer 1 : 2 Observer 1 : 3 Observer 2 : 1 Observer 2 : 2 Observer 2 : 3 보다시피 Observable 1 이 끝나고Observable 2가 다시 실행되는 구조로 되어..
일반적으로 Observable들은 cold상태인것들이다.RxJava를 하다보면 많이 듣는 게 cold와 hot Observable이다.도대체 이것들이 뭔가..Cold Observable일반적인 옵저버형태를 말한다.누가 구독해주지 않으면 데이터를 배출을 하지 않는다.일반적인 웹 요청 , 데이터베이스 쿼리등이 사용되며 내가 요청하면 결과를 받는 과정을 거친다.처음부터 발행하는 걸 기본으로 한다.Hot Observable구독자의 존재 여부와 상관없이 데이터를 배출하는 Observable 이다.그래서 여러 구독자에 선택적으로 고려가능하다.구독시점으로부터 발행하는 값을 받는 걸 기본으로 한다.마우스 이벤트 , 키보드 이벤트 , 시스템 이벤트등이 주로 사용된다.멀티캐스팅도 포함된다.데이터 발행자와 수신자도 이참에 ..