Observable과 Observer
Observable: 이벤트를 방출하는 객체 (이벤트를 발생시키는것 ,버튼을 누르는것)
ex) 계산기 버튼을 누르는것, 유투브 업로드
subscribe를 할수없다.
observer: Observable에서 전달받은 이벤트를 처리하는 객체
ex) 계산기 화면에 숫자가 보이는것, 유트브 구독
이벤트 전달을 못함.
Observable | Observer |
영상을 보내고 | 영상을 받아본다 |
이벤트 전달한다 | 이벤트를 처리한다. |
계속 이벤트 전달 | 계속 관찰하고 있어야한다. |
만약 Observable에게 Observer가 없다면?
-> 이벤트가 발생해도 아무것도 반영되지않음.
Infinite Observable VS Finite Observable
Infinite observable sequences | finite observable sequences |
Observable은 무한하게 발생한다. -> 글자 한글자씩작성하거나, 화면을 터치하는 모든 이벤트 (무한한 이벤트가 발생) |
데이터를 복구하거나 다운로드할떄 점진적으로 다운로드를 받을떄 쓴다, 네트워크 연결 유실,상태코드 오류,다운로드(완료,실패) |
ex) 메모앱에 글자작성, 버튼눌러 화면전환 | ex) 고화질 동영상을 다운로드 받을떄 |
completed,error가 일어나지않는 이벤트 객체 | completed,error가 일어나는 이벤트 객체 |
Observable Lifecycle
1. create연산자를 통해 Observable 생성.( 보통 구현되있는 operator 사용)
2. subScribe가 되면 Observable 이 실행
3. deinit되는 시점, Sequence 종료되는 시점에 Dispose됨.
4. error, completed 전달받으면 Sequence(=Observable) 종료, 종료이후 더이상이벤트발생하지않음.
(즉, Observable에대해 재사용불가)
Emit(여러번수행가능) | NEXT | 이벤트(제스처,인스턴스등) 전달(emit) | 점진적다운로드, 전달 |
Notification | Completed(마지막에 호출) | 정상적으로 모든이벤트 완료시 | 다운로드 완료 |
Notification | Error | lifecycle중 오류발생시 | 디코딩 실패, 상태코드 오류, 네트워크 연결 유실 |
emit: Observable이 이벤트를 발생시키는것 (무한/유한할떄 받을수있다)
completed,Error는 유한할떄만 발생하므로 이것이 발생하면 유한하다고 봐도된다.
subscribe는 Observer가 Observable을 구독하는것으로 이벤트 종류로는 next, error, complete 3종류로있다.
bind는 메인쓰레드에서 동작하는것으로 error, complete없이 next만 전달하는 이벤트를 만들려고 나온 operator이다. 그래서 UI 관련작업에서 많이 사용한다
Observable 이 Observer 에 event 를 전달하고
Observer는 Observable을 감시하고있다가 event를 처리한다.
이때 감시하는것을 Subscribe(Observable을 감시하다)한다라고 한다.
이떄 Observable이 3가지 이벤트를 전달한다.
새로운 이벤트는 onNext를 통해 Observer에게 전달한다. (rxswift에서는 이를 emission이라고 표현한다.)
그리고 Observable이 정상적으로 종료되면 completed를 Observer에게 전달하고 error가 발생하면 error가 전달된다.
두이벤트는 Observable Life cycle에서 가장마지막에 전달된다. (rxswift에서는 이를 notification이라 한다.)
Dispoable
1. Disposable은 구독중인 Stream을 원하는시기에 처리할수있게 도움
2. Observable은 모두 Disposable을 Return (이를통해 Stream종료 , 실행되던 Sequence모두종료)
rxswift로 만든거 -> rxcocoa( UIkit을 rxswift로 구현한것들)
Observable은 subscribe할수없음, Observer는 이벤트 전달할수없음.==>그래서Subject (emit & subscibe) 동시에할수있는걸만듬.
'𝐢𝐎𝗦' 카테고리의 다른 글
fastlane으로 배포 자동화 (0) | 2023.02.03 |
---|---|
LLDB 내용정리 (0) | 2022.10.31 |
마이그레이션(migration) (0) | 2022.10.13 |
Method Swizzling (0) | 2022.10.12 |
서버푸시(remote notification) (0) | 2022.10.11 |