RxSwfit) Subject

2023. 1. 6. 21:07· RxSwift
목차
  1. BehaviorSubject

Subject는 Observable과 Observer 기능이 들다 가능한 컴포넌트입니다.

Subject는 여러 Subscriber들에게 이벤트 전달이 가능합니다.

 

BehaviorSubject

BehaviorSubject의 Observable을 생성할때 초기 이벤트(item)를 가지고 있습니다.

Observer가 BehaviorSubject를 구독할때, 가장 최근에 Observable에 의해 방출되었던 이벤트(item)을 방출하면서 동작합니다.

그리고 계속해서 차후에 Observable가 전달하는 소스들을 방출합니다.

 

 

위에 네모 상자에 있는 것이 Behaviordml Observable의 시퀀스입니다. 처음 Observable이 생성과 동시에 분홍색 item을 초기값을 가집니다. 이후로 빨간색, 초록색, 파란색 순서대로 item이 전달이 되고 시퀀스가 종료되게 됩니다.

 

네모 상자 아래로 보이는 두개의 선들은 구독을 하고 item을 방출하는 시퀀스들입니다. 첫번째 시퀀스를 보면, 처음 구독을 했을때, 구독과 동시에 가장 최신의 item을 방출합니다. 구독 시점의 가장 최신의 item은 분홍색 item이기 때문에 분홍색 item을 방출합니다. 이후부터는 Observable로부터 전달 받은 item들을 방출합니다. 마찬가지로 두번째 시퀀스도 구독 당시에 가장 최신의 item은 초록색 item이기 때문에 초록색 item을 방출합니다.

 

위에 이미지를 코드로 구현해 보겠습니다.

//BehaviorSubject클래스로 Observable을 생성
let behaviorSubject = BehaviorSubject<String>(value: "Pink")

let subscription1 = behaviorSubject.subscribe { event in
	print("Subscription 1 Event: \(event)")
}

behaviorSubject.onNext("Red")

behaviorSubject.onNext("Green")

let subscription12 = behaviorSubject.subscribe { event in
	print("Subscription 2 Event: \(event)")
}

behaviorSubject.onNext("Blue")

/*
콘솔 출력
Subscription 1 Event: next(Pink)
Subscription 1 Event: next(Red)
Subscription 1 Event: next(Green)
Subscription 2 Event: next(Green)
Subscription 1 Event: next(Blue)
Subscription 2 Event: next(Blue)
*/

 

그라나 만약 Observable의 이벤트가 에러로 끝이나게 된다면, BehaviorSubject는 차후 Observer들에게 어떤 이벤트들을 방출하지 않을것입니다. 그러나 error 알림으로 후회할 것입니다.

 

아래 코드는 에러가 발생했을때를 가정한 코드이다.

enum MyError: Error {
    case someError
}

//BehaviorSubject로 Observable을 생성, 초기값은 문자열 = "Initial Value"
let behaviorSubject = BehaviorSubject<String>(value: "Initial Value")

//첫번째 구독자(subscription1) 구독을 시작
//구독과 동시에 최근 item을 방출
let subscription1 = behaviorSubject.subscribe { event in
    print("Subscription 1 Event: \(event)") // Subscription 1 Event: Initial Value
}

behaviorSubject.onNext("Event 1") // Subscription 1 Event: Event 1
behaviorSubject.onNext("Event 2") // Subscription 1 Event: Event 2

behaviorSubject.onError(MyError.someError) //Subscription 1 Event: error(someError)

//두번째 구독자(subscription2) 구독을 시작
//구독과 동시에 최근 item을 방출
let subscription2 = behaviorSubject.subscribe { event in
    print("Subscription 2 Event: \(event)") //Subscription 2 Event: error(someError)
}
//에러 이후에는 어떤 item을 방출하지 않는다.
behaviorSubject.onNext("Event 1")
behaviorSubject.onNext("Event 2")

/*
콘솔 출력
Subscription 1 Event: next(Initial Value)
Subscription 1 Event: next(Event 1)
Subscription 1 Event: next(Event 2)
Subscription 1 Event: error(someError)
Subscription 2 Event: error(someError)
*/

 

'RxSwift' 카테고리의 다른 글

RxSwift) Observer  (0) 2024.01.29
RxSwift) RxSwift, 반응형 프로그래밍  (1) 2024.01.16
RxSwift) 간단한 숫자 증가앱  (0) 2024.01.15
RxSwift) Observer  (0) 2023.01.06
  1. BehaviorSubject
'RxSwift' 카테고리의 다른 글
  • RxSwift) Observer
  • RxSwift) RxSwift, 반응형 프로그래밍
  • RxSwift) 간단한 숫자 증가앱
  • RxSwift) Observer
성실농장주
성실농장주
매일 조금이라도 꾸준히 성장하고 싶은 개발자
성실농장주
사과농장
성실농장주
전체
오늘
어제
  • 분류 전체보기 (43)
    • iOS 개발공부📱 (4)
    • Swift🐤 (12)
    • SwiftUI🐧 (2)
    • Firebase 🔥 (1)
    • Git 🐈 (2)
    • Linux (1)
    • Trouble Shooting🛠️ (2)
    • 자료구조🏛️ (1)
    • visionOS 개발공부👓 (1)
    • Algorithm💡 (4)
    • RxSwift (5)
    • 오픈소스 (1)
    • ios 개발자 면접 질문🥸 (6)
    • 영어문서 단어집📕 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • process_states
  • SWIFT
  • git
  • EnvironmentValues
  • Array
  • iOS_process_management
  • colorScheme
  • Tuple
  • Xcode
  • optional_chaining
  • processor_management
  • rethrows
  • RxSwift
  • CLLocationDegrees
  • control_transfer_statement
  • nested_function
  • responder_chain
  • process_control_block
  • Set
  • Debug View Hierarchy

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
성실농장주
RxSwfit) Subject
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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