일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프래그먼트
- 구조체
- 프로그래머스
- observable
- ios
- 자바
- Self
- rx
- concurrency
- 안드로이드
- 생명주기
- 백준
- 리스트뷰
- RxSwift
- 차이
- 옵셔널
- async
- 스위프트
- 연산자
- 클로저
- Swift
- 알고리즘
- 풀이
- 해시
- 프로퍼티
- View
- weak
- 이스케이핑
- Subject
- noncopyable
- Today
- Total
study record
[RxSwift] Observable과 Subject 차이 본문
Subject
- Subject란 Observable이자 Observer의 성격을 지니고 있다.
- Subject는 동적으로 값을 발행할 수 있다.
- Subject는 구독하고 있는 여러 Observer들에게 값을 발행할 수 있다.
Subject는 Observable을 상속하고 있다. 이는 Subject가 Observable이자 Observer라는 것을 의미한다.
Observer(관찰자)의 성격을 지니고 있기 때문에 Observable을 구독할 수 있다.
Observable이기 때문에 이벤트를 발행할 수도 있다.
* view의 유저 인터렉션을 viewModel의 Subject가 구독하고, 구독을 통해 발행된 값을 바탕으로 viewModel에서 비즈니스 로직을 거쳐 가공된 데이터를 View가 구독함으로써 로직을 구성할 수 있다.
ObserverType 프로토콜을 채택함으로써 동적으로 이벤트를 발행할 수 있다. on 메서드를 통해 이벤트를 발행한다.
Observable과 Subject의 차이점
Observable과 Subject는 모두 구독할 수 있다. 하지만 차이점이 존재한다.
- Subject는 multicast 방식으로 여러 개의 Observer에게 이벤트를 발행할 수 있다.
- Observable은 unicast 방식으로 하나의 Observer에게만 이벤트를 발행한다.
Observable이 여러 번의 구독을 할 수 없다는 것이 아니라 Observer가 구독하게 될 때마다 새로 생성(create)되어 발행하게 된다는 것이다. Observable은 단지 하나의 함수이기 때문에 어떤 상태도 가지지 않으므로 모든 새로운 Observer에 대해 관찰 가능한 create 코드를 반복해서 실행한다. 코드는 각 관찰자에 대해 실행되므로 HTTP 호출인 경우 각 관찰자에 대해 호출된다. 이로 인해 주요 버그와 비효율이 발생한다.
Subject는 Observer들의 정보를 저장하고 이벤트가 발행되면 모든 Observer에게 제공한다. 따라서 Subject는 여러 번 구독하여도 같은 값이 공유된다.
참고:
https://ntomios.tistory.com/12
https://sujinnaljin.medium.com/rxswift-subject-99b401e5d2e5
'iOS > RxSwift' 카테고리의 다른 글
[RxSwift] Driver란? (0) | 2022.03.29 |
---|---|
[RxSwift] Subject와 Relay (0) | 2022.03.14 |
[RxSwift] Subject의 종류 (0) | 2022.03.11 |
[RxSwift] RxSwift 왜 사용하게 되었나? +(선언적 프로그래밍) (0) | 2022.03.07 |
[RxSwift] Hot Observable과 Cold Observable의 차이 (0) | 2022.03.04 |