[RxSwift] RxSwift 톺아보기 - 1

2022. 10. 31. 04:06·RxSwift

RxSwift를 써보면서 공부했던 내용을 간략하게 정리한 글입니다.


1. 소개

1) 왜 RxSwift를 사용하는가?

  • 우리가 앱을 만들기 위해 작성하는 대부분의 코드는 외부 이벤트(UI 컨트롤 등)에 대한 응답을 다룬다.
  • 예를 들어 버튼 터치에 대한 액션 메서드를 작성하거나 기기의 방향 변경에 대한 옵저버를 추가해서
    특정 작업을 수행하는 코드를 작성한다.
  • 뿐만 아니라 네트워크 통신으로 받은 응답을 처리하기 위해 클로저 구문을 작성하기도 한다.
  • RxSwift는 이러한 모든 비동기적인 응답 코드들을 처리하는 일관된 시스템이다.

2) 개념

  • 모든 Observable 객체는 Sequence의 인스턴스로 간주된다.
Sequence
순차적, 반복적으로 자신의 원소에 접근할 수 있는 타입을 의미하며,
for-each 같은 반복 구문을 사용할 수 있고 contains, map 등 다양한 연산자를 제공한다. 

Sequence 프로토콜을 준수하는 타입은 내부에 makeIterator() 라는 메서드를 구현해야 하는데
이 메서드의 반환값인 Iterator 타입은 Sequence의 원소(값)를 한 번에 하나씩 제공해주는 역할을 한다.
  • 즉, Observable 객체는 자신만의 원소를 가지고 있고 이 원소에 한 번에 하나씩
    순차적으로 접근할 수 있는 객체이다.
  • Swift의 Sequence와의 중요한 차이점은 각 원소들에 대해 비동기적으로 처리할 수 있다는 것이고
    RxSwift의 다른 모든 것들은 이 개념을 확장해 나간 것이다.
    • Observable(ObservableType)은 Sequence와 같다.
    • ObservableType의 subscribe(_:) 메서드는 Sequence의 makeIterator()와 같다.
      즉, 원소(값)을 순차적으로 제공해주는 객체(Swift의 Iterator 역할)를 반환한다.
    • subscribe(_:)의 매개변수인 ObserverType 객체는 Observable이 방출하는(Emit)
      원소와 이벤트들을 자동으로 하나씩 넘겨 받는다.
  • Observable은 Observer에게 3가지 타입의 이벤트를 방출한다.
    • Event.next(Element)
    • Event.error(ErrorType)
    • Event.completed
  • Observable이 next 이벤트를 방출하면 이후 이벤트를 계속 보낼 수 있지만
    error 또는 completed 이벤트를 방출한 경우 더 이상 이벤트를 보낼 수 없다.
  • Observable은 Observer(Subscriber)가 생기기 전까지 이벤트를 방출하지 않는다.
    즉, subscribe를 호출해야 이벤트가 방출된다.
  • subscribe(_:) 메서드는 Disposable 타입의 인스턴스를 반환하는데, 이 인스턴스는
    subscription(Observable이 이벤트를 보내고 Subscriber가 받는 행위) 같은 리소스를 나타낸다.
이름이 Disposable인 이유?
Observable의 모든 원소가 방출되어 Observer가 completed 이벤트를 받거나 error 이벤트를 받으면
그 이후엔 어떤 이벤트도 받지 못하고 재사용할 수 없게 되기 때문이다.

유한한 시퀀스는 completed 또는 error 이벤트를 보낼 때 자동으로 메모리에서 해제되지만
버튼 탭과 같은 무한한 시퀀스는 자동으로 종료되지 않기 때문에 수동으로 처리해야 한다.
  • Disposable을 통해 내부 리소스를 메모리에서 해제할 수 있으며 DisposeBag을 사용하면
    이런 리소스들을 확실하게 정리할 수 있다.
저작자표시 (새창열림)

'RxSwift' 카테고리의 다른 글

[RxSwift] RxSwift 톺아보기 - 2  (0) 2022.11.01
'RxSwift' 카테고리의 다른 글
  • [RxSwift] RxSwift 톺아보기 - 2
무슈후슈
무슈후슈
코딩은 창작이다.
  • 무슈후슈
    감성코드
    무슈후슈
  • 전체
    오늘
    어제
    • 분류 전체보기 (119)
      • 알고리즘 (30)
      • IOS (24)
      • Swift (4)
      • TIL (41)
      • CS (15)
      • 메모 (2)
      • 시플 (1)
      • RxSwift (2)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    이분 탐색
    SWIFT
    git
    그래프 탐색
    github
    ios
    http
    코딩테스트
    다이나믹 프로그래밍
    python
    비동기
    파이썬
    Realm
    알고리즘
    MVVM
    그리디
    프로그래머스
    백준
    codable
    풀이
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
무슈후슈
[RxSwift] RxSwift 톺아보기 - 1
상단으로

티스토리툴바