[RxJava/발행자] 1. 발행자의 큰 분류 : Cold Observable과 Hot Observable

2021. 5. 23. 18:58· Kotlin/Reactive Programming
목차
  1. Cold Observable
  2. Hot Observable
  3.  
반응형

앞선 글에서 RxJava에서는 발행자와 구독자가 존재하며, 발행자는 데이터를 발행하고 구독자는 발행한 데이터를 처리하는 동작을 한다고 하였다.

 

여기서 발행자는 발행하는 방식에 따라 대분류 두개로 나뉘게 되는데 바로 Cold Observable과 Hot Observable이다. Observable을 직역해보면 "관찰할 수 있는" 이라는 말이 되는데 즉 발행자와 같은 말이다. 그렇다면 Cold Observable과 Hot Observable의 차이는 무엇일까? 아래에서 알아보도록 하자.

 

예제 링크: https://github.com/seyoungcho2/RxJavaExample

경로 : example/Example2_ColdObservable.kt, example/Example3_HotObservable.kt

Cold Observable

Cold Observable은 구독자(Subscribe)가 구독(subscribe, observe)을 요청하였을 때 아이템을 발행하기 시작하는 발행자이다. Cold Observable은 처음부터 끝까지 발행되는 것이 보장된다. Cold Observable의 대표적인 예는 바로 Observable 클래스이다.

fun main() {
    val observable: Observable<Int> = Observable.fromArray(1, 2, 3)

    observable.subscribe { it ->
        println("first subscriber subscribed : ${it}")
    }

    observable.subscribe {
        println("second subscriber subscribed : ${it}")
    }
}

위와 같은 코드를 구독하는 2개의 subscribe을 붙이면 다음과 같은 결과가 나온다.

first subscriber subscribed : 1
first subscriber subscribed : 2
first subscriber subscribed : 3
second subscriber subscribed : 1
second subscriber subscribed : 2
second subscriber subscribed : 3

각각의 subscriber은 발행자로부터 처음부터 끝까지 데이터를 발행 받는다.

 

 

Hot Observable

Hot Observable은 구독자가 구독을 요청하였을 때부터 발생한 값들만을 구독자들에게 발행한다. Hot Observable은 구독을 시작한 위치에 따라 몇개의 데이터를 발행 받지 못할 수도 있다. Hot Observable의 대표적인 예시는 PublishSubject이다. Publish Subject는 발행 시점에 구독을 하는 구독자에게만 데이터를 발행한다.

fun main() {
    val publisher: PublishSubject<Int> = PublishSubject.create()

    publisher.onNext(1)

    publisher.subscribe { it ->
        println("first subscriber subscribed : ${it}")
    }

    publisher.onNext(2)

    publisher.subscribe { it ->
        println("second subscriber subscribed : ${it}")
    }

    publisher.onNext(3)
}

위와 같이 1번 발행 후 첫 구독자를 붙이면, 첫 구독자는 해당 시점부터 데이터를 구독하므로 1번 데이터는 받지 못한다. 2번 발행 후 둘째 구독자를 붙이면, 둘째 구독자는 해당 시점부터 데이터를 구독하므로 1,2번 데이터는 받지 못한다.

따라서 위 코드의 결과는 다음과 같다.

first subscriber subscribed : 2
first subscriber subscribed : 3
second subscriber subscribed : 3

 

 

반응형
  1. Cold Observable
  2. Hot Observable
  3.  


 

Kotlin, Android, Spring 사용자 오픈 카톡

오셔서 궁금한 점을 질문해보세요!
비밀번호 : kotlin22

open.kakao.com

'Kotlin/Reactive Programming' 카테고리의 다른 글
  • [RxJava] 반응형 프로그래밍 이해하기
Dev.Cho
Dev.Cho
'조세영의 Kotlin World'는 Kotlin를 전문적으로 다루는 개인 기술 블로그입니다. Kotlin 세계에 대한 양질의 자료를 제공하며 Kotlin, Android, Spring, CI, CD 분야에 대해 다룹니다.
Dev.Cho
조세영의 Kotlin World
Dev.Cho
전체
오늘
어제

블로그 메뉴

  • LinkedIn
  • GitHub
  • 분류 전체보기 (491)
    • Kotlin (104)
      • Class and Interface (19)
      • Variable and Function (8)
      • Modifier (5)
      • Collection (14)
      • Time (8)
      • 동시성 제어 (7)
      • Reactive Programming (2)
      • Paradigm (2)
      • Kotlin 자료구조 (15)
      • Design Patterns (11)
      • Algorithm (3)
      • Exception (1)
      • 기타 (9)
      • Update History (0)
    • Coroutines (32)
      • Coroutine Basics (18)
      • Flow (9)
      • CoroutineScope (3)
      • Debugging (2)
    • Testing Codes (28)
      • Test 기본 (3)
      • JUnit5 (9)
      • MockK (6)
      • Testing Coroutines (1)
      • Testing Android (8)
      • Test 기타 (1)
    • Spring (50)
      • Dependency Injection (18)
      • Settings (5)
      • REST API (0)
      • DevTools (1)
      • MVC (18)
      • Error (2)
      • MongoDB (2)
      • Database (4)
    • Android (39)
      • Architecture (2)
      • Component (5)
      • Manifest (1)
      • Lifecycle (2)
      • Dependency Injection (17)
      • Resource (1)
      • Storage (1)
      • Security and Optimization (1)
      • WebView (2)
      • Error (6)
    • Android Jetpack Compose (33)
      • Compose (6)
      • Compose Modifier (13)
      • Compose Resource (4)
      • Compose State (4)
      • Compose Side Effect (6)
    • Android Jetpack Compose UI (48)
      • Compose Layout (14)
      • Compose Text (10)
      • Compose Button (5)
      • Compose Dialog (2)
      • Compose TextField (0)
      • Compose UIs (4)
      • Compose Animation (1)
      • Compose Canvas (12)
    • Android Jetpack (10)
      • Datastore (5)
      • ViewModel (4)
      • LiveData (1)
      • Paging (0)
    • KMP (5)
    • Programming (4)
    • Machine (9)
      • JVM (7)
      • Linux (2)
    • CI, CD (74)
      • Gradle (12)
      • Groovy Gradle (5)
      • Git (25)
      • Git Remote (5)
      • GitHub (5)
      • GitHub Actions (21)
    • Network (33)
      • GraphQL (12)
      • HTTP (11)
      • Basic (9)
    • 오픈소스 (3)
    • Database (3)
      • MongoDB (3)
    • IDE (6)
      • Android Studio (2)
      • Intellij (4)
    • Firebase (1)
    • Javascript (9)

공지사항

  • 코틀린 코루틴 완전 정복 강의 in 인프런 오픈
  • 코틀린 코루틴의 정석 책 출간
  • Kotlin Coroutines 공식 기술 문서 한국어 번⋯
  • GitHub에서 조세영의 Kotlin World를 Foll⋯
  • 문의&제안

인기 글

태그

  • 스프링
  • github
  • junit4
  • Coroutine
  • Unit Testing
  • Jetpack Compose
  • Android
  • Dependency Injection
  • dagger2
  • kotlin spring
  • flow
  • 코틀린
  • GIT
  • Spring
  • junit
  • 의존성 주입
  • gradle
  • Android Compose
  • 코루틴
  • HTTP
  • 유닛 테스팅
  • Kotlin
  • Class
  • GraphQL
  • Spring boot
  • junit5
  • compose
  • java
  • github actions
  • 안드로이드

최근 글

반응형
hELLO · Designed By 정상우.v4.3.0
Dev.Cho
[RxJava/발행자] 1. 발행자의 큰 분류 : Cold Observable과 Hot Observable
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.