RxJava Observable 이란 무엇인가
Rxjava는 비동기나 이벤트 기반 프로그래밍의 고통을 덜어내기 위해 만들었다.
rx.Observable은 값이 흐르는 순서를 나타내는 추상화이다.
observable은 본질적으로 push 방싱을 취하기 때문에 언제 값을 생성할지 스스로 정한다. 즉 특정 시점에서 클라이언트가 Observable을 구독할 수 있으며 Observable이 값을 방출하면 알림을 받지만 구체적으로 언제 받을지는 알 수 없다.
Observable<Tweet> tweets
tweets 는 상태 갱신은 확실히 이벤트 스트림으로 받는데 Iterator와는 달리 필요할 때 값을 끌어오는게 아니라 Observable은 값이 들어오는대로 밀어내야 한다.
Observable<Double> Temperature
어떤 기기에서 온도값을 생성하여 구독자에게 밀어낸다. tweets와 temperature 모두 미래 사건(이벤트)의 무한 스트림 예제이다.
Observable<Customer> customers
대부분의 경우 아마도 데이터베이스 질의를 통한 고객 목록을 반환할 것이며, 결과 개수가 어떻든 간에 느긋하게 수행된다.
Observable<HttpResponse> response
반면 위에는 종료 시까지 단 하나의 이벤트만 넘긴다. 이 값은 언젠가 나타나서 클라이언트 코드로 가고 해당 응답을 받으려면 구독해야 한다.
Observable 알림 구독
뜨거운 Observable 차가운 Observable
차가운 observable 은 단순히 정적인 구조로 일반적으로 Observable.create() 를 사용해서 만드는데, 누군가가 수신하지 않는 한 어떤 작업도 시작하면 안되고 실행을 연기한다.
반면에 뜨거운 Observable은 소비자로부터 독립적이어서 Observable은 subscribe동작에 영향을 미치지 않으며 서로 완전히 분리되고 독립적이다.
뜨거운 Observable은 보통 이벤트 소스를 통제할 수 없는 경우에 발생한다. 대표적인 예가 바로 마우스의 움직임이나 키보드 입력이 있다.
느슨한 Observable 을 사용하게 되면 observe() 를 시작할때 단 한 번 호출한 뒤 싱글턴 방식을 유지해야 한다. 즉 다수의 구독자들이 재사용 할 수 있어야 한다.
그 방법을 알아보자
수동으로 Subscriber 관리하기
set <Subscriber<Status>> 로 모든 구독자를 추적하겠다는 발상인데, 이 집합이 비어 있는지 여부에 따라 외부 시스템 연결 시작/종료를 결정한다.
애플리케이션 시작시 몇몇 컴포넌트 ( 예 스프링 빈 ) 에서 이 Observable을 구독하고 듣기 시작한다.
뜨거운 observable 이벤트를 방출하기 시작하여 모든 subscriber가 전전으로 일관된 세계관을 유지하기 바란다면
해당 observable을 게시하고 대상 시스템의 모든 컴포넌트에 구독( subscribe ) 기능을 부여해야 한다.
'개발 > java' 카테고리의 다른 글
자바 람다식이란? (0) | 2018.10.06 |
---|---|
자바 개발 쓰레드에 대한 정리와 제네릭 사용이유 (0) | 2018.09.29 |
steemit java commitor 되기 2 새로운 프로젝트 만들기 (0) | 2018.09.28 |
steemit java commitor 되기 1 core 살펴보기 (0) | 2018.09.27 |
RxJava 란 무엇인가 (1) | 2018.09.21 |
댓글