티스토리 뷰

RxJava

RxJava Subjsct class

구름나드리 2019. 1. 18. 18:39

public class Subject {

/*
* 1. AsyncSubject 클래스
*
* Observable 에서 발행한 마지막 데이터만 얻어 어는 subject 클래스 (차가운 Ob 를 뜨거운 Ob로 변경해주는 클래스)
*
* - 완료됨 과 동시에 마지막 데이터를 구독자들에게 전달 (이전 데이터는 전달하지 않는다.)
*
* */

/*
* 2. BehaviorSubject 클래스
*
* 구독자가 구독을 하면 가장 최근 값 혹은 기본값을 넘겨주는 클래스이다.
*
* */

/*
* 3. PublishSubject 클래스
*
* 가장 평범한 Subject 클래스 이다. 오직 해당시간에 발생한 데이터를 그대로 구독자에게 전달 받는다.
*
* */

/*
* 4. ReplaySubject 클래스
*
* 주의 : Subject 클래스의 목적은 뜨거운 Observable 을 활용하는 것인데 차가운 Observable 처럼 동작하기 때문이다.
* 구독자가 새로 생기면 항상 데이터의 처음부터 끝까지 발행하는 것을 보장해 줍니다.
* 그러므로 모든 데이터 내용을 저장해두는 과정 중 메로리 누수가 발생할 가능성을 염두에 두고 사용할 때 주의해야 합니다.
*
* */
public static void main(String[] args) {

// AsyncSubject class
//ex 1
AsyncSubject<String> subject = AsyncSubject.create();
subject.subscribe(data -> System.out.println("subscriber #1 => " + data));
subject.onNext("1");
subject.onNext("3");

subject.subscribe(data -> System.out.println("Subscriber #2 => " + data));
subject.onNext("5");
subject.onComplete();

System.out.println(" ========================== ");

// ex2
Float[] temperature = {10.1f, 13.4f, 12.5f};
Observable<Float> source = Observable.fromArray(temperature);

AsyncSubject<Float> subject2 = AsyncSubject.create();
subject2.subscribe(data -> System.out.println("Subscribe #3 => " + data));

source.subscribe(subject2);

System.out.println(" ==========================\nBehaviorSubject ");

//BehaviorSubject
//ex1
BehaviorSubject<String> beSubject = BehaviorSubject.createDefault("6");
beSubject.subscribe(data -> System.out.println("Subscriber #1 => " + data));
beSubject.onNext("1");
beSubject.onNext("3");
beSubject.subscribe(data -> System.out.println("Subscriber 2 => " + data));
beSubject.onNext("5");
beSubject.onComplete();

System.out.println(" ==========================\nPublishSubject ");

//PublishSubject class
// ex1
PublishSubject<String> puSubject = PublishSubject.create();
puSubject.subscribe(data -> System.out.println("Subscriber #1 => " + data));
puSubject.onNext("1");
puSubject.onNext("3");
puSubject.subscribe(data -> System.out.println("Subscriber #2 -> " + data));
puSubject.onNext("5");
puSubject.onComplete();

System.out.println(" ==========================\nReplaySubject ");

//ReplaySubject class
// ex 1
ReplaySubject<String> reSubject = ReplaySubject.create();
reSubject.subscribe(data -> System.out.println("Subscriber #1 => " + data));
reSubject.onNext("1");
reSubject.onNext("3");
reSubject.subscribe(data -> System.out.println("Subscriber #2 => " + data));
reSubject.onNext("5");
reSubject.onComplete();

}

}






데이터 발행자(data source) 

 데이터 수신자 

 Observable 

 Single
 Maybe
 Subject 
 Completable

구독자(Subscriber)

옵서버(Observer)
소비자(Consumer)


 


'RxJava ' 카테고리의 다른 글

fillter() 함수  (0) 2019.02.13
map 함수  (0) 2019.02.07
flatMap() 함수  (0) 2019.01.23
Java8 Function, Consumer, Predicate, Supplier  (0) 2019.01.10
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
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
글 보관함