RxSwift

[RxSwift] RxSwift 맛보기 👅

녕이 2024. 8. 19. 21:34
728x90

 

 

 

 

안녕하세요 녕입니다... 🍋

 

이번에는 RxSwift에 대해서 공부를 해보려고 합니다. 그동안 RxSwift 공부를 책만 보다 보니 집중이 안되더라고요. 역시 이럴 때는 블로그 작성하는 게 낫더라고요. 한번 열심히 해보겠습니다. 여러분들께도 도움이 되었으면 좋겠네요. Rx는 사실 처음에는 뭐라는 거야 싶을 수 있는데 코드를 볼수록 단순하고 제법 이해가 되더라고요. 개념은 확실하게 가는 게 좋겠죠. 화이팅해봅시다.

 

책은 ⌜Reactive_Programming_with_Swift_v4.0.0⌟을 보고 공부했습니다. 옛날 책이라 그런지 좀 이상한 부분도 있더라고요(?) 큼큼 추가적으로 이해가 안 가는 부분은 구글링 했습니다^p^

 

 


 

 

RxSwift란?

: observable sequence와 operator를 사용해서 비동기 코드와 이벤트 기반 코드를 구성하는 데 사용되는 라이브러리

 

비동기 프로그래밍은 언제 사용될까?

  • 버튼 탭
  • 텍스트필드
  • 네트워킹
  • 디스크에 데이터 저장
  • 오디오 플레이

이런 작업들은 동시에 실행되는 것처럼 보인다. 그러나 비동기적으로 실행된다.

이런 애들을 RxSwift 라이브러리를 사용해서 이벤트를 받고 이에 대한 작업을 진행하면 굉장히 편리하다.

 

 

다른 비동기 API는?

  • NotificationCenter: 이벤트 발생 시 코드 실행. (디바이스 방향 변경, 키보드 표출/미표출)
  • Delegate Pattern: 객체 행동 정의
  • Grand Central Dispatch(GCD): 코드 블락을 연속적/동시/딜레이를 준 뒤에 실행되도록 스케줄링 가능
  • Closure → CallBack: 코드에서 전달할 수 있는 closure
  • Combine: 리액티브 비동기 코드

[주의] Delegate 나 NotificationCenter를 사용하면 주어진 시간 내에 앱의 상태를 일관성 있게 유지하기 어렵다

 

 

RxSwift 맛보기 👅

Observables

: Element 타입 데이터의 변하지 않는 snapshot을 운반시킬 수 있는 일련의 이벤트를 비동기적으로 생성할 수 있는 기능

쉽게 말해서 아래와 같이 이해하면 될 거 같다:

  • 어떤 value 혹은 이벤트를 비동기적으로 생성할 수 있는 기능
  • 사용자가 시간이 지남에 따라 어떤 객체가 발생시키는 이벤트 또는 value를 구독(subscribe)할 수 있게 하는 기능

 

Observable class는 여러 observer가 아래의 일을 하게 하도록 한다.

  • 실시간 이벤트 반응
  • UI 업데이트
  • 신규 데이터 처리 및 활용

 

Observable은 세 가지 타입의 이벤트를 받는다.

  • next이벤트가 종료될 때까지 value를 무한히 내보낼 수 있다
  • 최근 혹은 다음 value를 가지고 오는 이벤트
  • completed
  • event 시퀀스를 성공적으로 종료시킨다. 더 이상 value를 내보내지 않는다
  • error
  • 에러와 함께 시퀀스 종료. 추가적인 이벤트를 내보내지 않는

 

예를 들어) 인터넷에서 파일을 다운로드하는 경우

  1. 다운로드 시작 후, 들어오는 데이터 관찰
  2. 파일 일부 도착하면 데이터 덩어리를 반복적으로 받음 (next)
  3. 네트워크 연결이 중단되면 다운로드 멈추고 연결 시간 초과로 에러 발생 (error)
  4. 파일의 모든 데이터 다운로드 후 성공적으로 완료 (completed)
API.download(file: "https://...")
	.subscribe(
		onNext: { data in
			// append data to temporary file
		},
		onError: { error in
			// display error to user
		},
		onCompleted: {
			// use downloaded file
		}
	)

여기서 API.download는 Observable<Data> 객체를 반환한다.

 

 

Schedulers

: DispatchQueue 또는 OperationQueue의 Rx에 해당하는 것으로, 훨씬 사용하기 쉽다

여러 경우에 따라 최상의 성능을 달성하기 위해 동일한 subscription의 작업을 다른 스케줄러에 예약!

  • network subscription
    1. fetchJSON >> Custom
    2. process JSON >> Background
    3. display to UI >> Main Thread
  • data bindings
    1. data update >> Background
    2. display to UI >> Main Thread
  • UI events
    1. UI event handling / UI update >> Main Thread

각 구독은 스케줄러 사이에서 Dispatch 역할을 수행해서 작업 조각들을 올바른 context로 전송해서 서로의 출력을 원활하게 할 수 있도록 한다!

 

간단하게 RxSwift를 소개해봤다. 사실 개인적으로 Observable, Scheduler 도 중요하지만 여기선 말하지 않았지만 뒤에 나올 Subject, Relay, Driver 등이 조금 헷갈리는 개념이기 때문에 거기서 힘쓰는 게 좋다. Observable은 처음에는 뭐라는 거지 싶은데 보다 보면 이해가 간다. 화이팅 해보자… ( ・∇・)~

 

 

 

728x90