Subject란?
Subject는 Observable과 Observer의 역할을 모두 수행
Observer로써 하나 이상의 Observable을 구독할 수 있고,
Observable로써 이벤트를 방출할 수 있다.
Observable과 Subject은 Subscribe의 방식에 차이가 있다.
Subject는 multicast 방식이어서 여러개의 observer를 subscribe 할 수 있다.
Observable은 unicast 방식으로 하나의 Observer만을 subscribe 할 수 있다.

unicast
각각의 Subscribe 된 Observer가 Observable에 대해 독립적인 실행을 갖는 것
let diceThrow = Observable<Int>.create { observer in
observer.onNext(Int.random(in: 1 ...6))
return Disposables.create()
}
diceThrow.subscribe(onNext: { (element) in
print("observer 1 : \(element)")
})
diceThrow.subscribe(onNext: { (element) in
print("observer 2 : \(element)")
})
결과
observer 1 : 3
observer 2 : 6
서로 다른 숫자가 출력된다.
Observer가 해당 Observable에 대해 독자적인 실행을 가져 동일한 Observable 구독을 통해 생성된 두 개의 Observer라 해도 Observable이 각각 실행되면서 Observer에게 서로 다른 값이 생성된다.
multicast
하나의 Observable 실행이 여러 Subscriber에게 공유
let diceThrow = BehaviorSubject(value: 0)
diceThrow.onNext(Int.random(in: 1 ...6))
diceThrow.subscribe(onNext: { (element) in
print("observer 1 : \(element)")
})
diceThrow.subscribe(onNext: { (element) in
print("observer 2 : \(element)")
})
결과
observer 1 : 3
observer 2 : 3
구독해서 생성될 Observer에게 Observable의 동일한 실행이 전달된다.
Observable의 실행이 공유되면서 같은 값이 할당된다.
내가 이해한 것은
Observable은 Observer의 구독과 함께 새로운 값을 할당하여 Observer에 전달하고
Subject는 하나의 Observable의 실행을 여러 Subscriber에 공유하고, 그 값을 구독한 Observer에게 전달한다.
참고한 블로그
https://sujinnaljin.medium.com/rxswift-subject-99b401e5d2e5
https://babbab2.tistory.com/193
https://ios-development.tistory.com/98
틀린 내용이 있다면 댓글 남겨주세요!
'iOS > RxSwift' 카테고리의 다른 글
| Subject의 종류 (1) | 2024.06.04 |
|---|---|
| Hot Observable VS Cold Observable (0) | 2024.04.20 |
| Observable, Observer, Subscribe에 대해 (2) | 2024.04.08 |
| RxSwift의 기본 개념 (0) | 2024.04.07 |