티스토리 뷰
Observable과 Subject
Subject는 Observable이자 Observer
Subject는 스트림 공유
-> 즉, Subscribe할때마다 새로운 시퀀스가 생성되는게 아니라서 리소스 낭비를 줄일 수 있음.
Subject에는 Publish, Behavior, Replay, Async가 있는데 다 share()를 내부적으로 갖고있기때문에 따로 추가해주지 않아도됨
subscribe와 bind
subscribe는 next, error, complete가 있는데, 무한한 시퀀스에서는 error나 complete를 안씀.
-> UI를 핸들링하는 부분은 실패할 일이 거의 없기때문에 error나 complete가 필요없기때문에 bind사용
bind는 UI핸들링에 특화되어있고, 메인스레드에서 동작
bind와 drive
drive도 마찬가지로 이벤트를 전달할 때 사용.
하지만 drive는 스트림 공유
그래서 drive를 사용한다면 share를 사용할 필요가 없음.
bind를 꼭 사용해야하는 상황이 아니면 drive를 사용
Subject와 Relay
Relay는 next만 방출함
-> Relay는 UI핸들링에 최적화되어있는 요소이기때문에 complete랑 error를 다룰 필요가 없음
Relay에는 Publish와 Behavior만 있음
Relay에서는 next대신 accept사용
Relay는 drive와 짝꿍
Share
일반적으로 subscribe(bind)를 할 때마다 새로운 시퀀스가 생성됨.
그래서 subscribe를 여러 번 하는 경우엔 불필요한 리소스가 발생
-> 네트워크의 경우 share()가 없으면 콜 수가 너무 많아질 수도 있음
subject는 내부에 share()가 있다고했음.
그래서 위와 같이 스트림을 공유하는 경우에는 같은 수가 나오고, 아닌 경우에는 매번 다른 수가 나옴
-> 매번 새로운 시퀀스를 생성한다는 말임.
아래와 같이 share를 사용해서 해결하거나 Relay객체로 선언하여 drive를 이용해 해결할 수 있음.
bind와 drive는 위에서 말했듯이 옵저버블이 UI로 특화된 형태이기때문에 subscribe만 할 수 있고 값을 변경할 수 없음
또한 메인 스레드에서의 실행을 보장함
근데 drive는 스트림을 공유함
-> 내부적으로 share메서드가 구현되어 있음
'TIL' 카테고리의 다른 글
[TIL] 2022 / 12 / 19 - SwiftUI (0) | 2022.12.19 |
---|---|
[TIL] 2022 / 11 / 1 (0) | 2022.11.01 |
[TIL] 2022 / 10 / 26 - Rx (0) | 2022.10.26 |
[TIL] 2022 / 10 / 25 - Rx (0) | 2022.10.25 |
[TIL] 2022 / 10 / 24 - Rx (0) | 2022.10.24 |
- Total
- Today
- Yesterday