250x250
반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

스윞한 개발자

Swift - ReactiveX(RxSwift) 본문

Swift 이론

Swift - ReactiveX(RxSwift)

스윞남 2024. 4. 12. 18:43
728x90
반응형
SMALL

안녕하세요 오늘 포스팅은 RxSwift! 에 대해서 포스팅해 보겠습니다. 사실 저는 MVVM 패턴에 대해서 공부하다가 Combine, RxSwift에 대해서 간단하게 공부해 보았는데요! 그중에서 또 RxSwift가 대세라는데 ㅎㅎ RxSwift를 더 깊게 공부해 보고 사용해 보겠습니다!

 

 

# RxSwift(Reactive Extension + Swift)

 

 


728x90

https://github.com/ReactiveX/RxSwift

 

GitHub - ReactiveX/RxSwift: Reactive Programming in Swift

Reactive Programming in Swift. Contribute to ReactiveX/RxSwift development by creating an account on GitHub.

github.com

 

먼저 공식문서를 살펴보면 RxSwift는 Reactive Extensions 표준을 Swift에 맞게 구현한 것이라고 나와있습니다. 

즉, 반응형 프로그래밍(프로그래밍에 있어 하나의 패러다임)이라고 생각하면 됩니다! 

 

반응형 프로그래밍이란, 데이터의 흐름/변경사항을 전파하는 것에 중점을 둔 프로그래밍 패러다임입니다. 반응형 패러다임을 사용할 경우, 주변 환경/데이터에 변화가 생기게 되면 설치/실행된 모델들이 변경된 이벤트를 받아 동작하도록 설계하는 방식입니다.

 

사실 패러다임이 어쩌고 반응형이 어쩌고 말이 참 어려운 거 같아요..

 

간단하게 말하자면 

반응형 패러다임을 쓰지 않았을 때 테이블을 가져왔다고 생각해 봅시다. 그럼 매번 값이 바뀔 때마다 새로운 값을 할당하고 설정해주어야 하는데 반응형 패러다임을 쓰게 된다면 그럴 필요 없이 값이 변할 때마다 바로바로 업데이트되는 것입니다. 왜냐하면 변경사항을 전파하는 것에 중점을 둔 패러다임이기 때문이죠!

 

간단한 예시로는

 

var a = 10
var b = 20
 
var sum = a + b
sum              // 30

 

반응형 패러다임을 쓰지 않는다면 a의 값이 바뀌더라도 sum의 값은 업데이트되지 않습니다.

a = 20
sum              // 30

 

반면, 반응형 프로그래밍을 사용하게 된다면 아래와 같이 a의 값이 변하게 되면 sum의 값이 즉각적으로 변하게 됩니다!

a = 20
sum              // 40

 

 

 

그런데 사실 기존에 이러한 비동기 프로그래밍을 사용할 수 있는 기능이 존재했는데(델리겟 패턴...), 왜 RxSwift를 사용해야 할까요?

 

# RxSwift를 사용해야 하는 이유?

먼저, RxSwift 없이 비동기적 접근을 한다면

비동기 실행에 관한 명확한 추론을 하기가 힘들고 비동기 실행 코드를 이해하기 힘들다는 단점이 있습니다.

 

두 번째는

MVVM 패턴과 밀접한 연관이 있습니다.

RxSwift는 데이터 바인딩을 제공하는 플랫폼에서 만들어진 이벤트 중심 프로그램을 위해 특별히 개발되었습니다!

 

세 번째,

사람이 명시적으로 코드를 통해 비동기적인 앱을 구현할 때 한계가 있습니다.

함수를 선언할 때 순서만 달라져도 완전히 다른 코드가 될 수 있습니다!

 

마지막으로,

반응형 시스템!

언제나 UI를 최신상태로 유지가 가능하며, 에러가 발생할 때 회복에 유연한 탄력적 특성을 갖고 있습니다. 또한 데이터 모음, 자원 공유 등 다양한 Workload를 처리할 수 있고 재사용성의 장점과 lifecycle과 클래스의 구현을 분리 가능합니다.

 

그럼 이렇게 좋은 RxSwift를 설치하기 위해서는

1. CocoaPods

# Podfile
use_frameworks!

target 'YOUR_TARGET_NAME' do
    pod 'RxSwift', '6.6.0'
    pod 'RxCocoa', '6.6.0'
end

# RxTest and RxBlocking make the most sense in the context of unit/integration tests
target 'YOUR_TESTING_TARGET' do
    pod 'RxBlocking', '6.6.0'
    pod 'RxTest', '6.6.0'
end

 

위와 같이 Podfile에 추가해서 설치!

 

2.SPM

SPM에

https://github.com/ReactiveX/RxSwift

 

GitHub - ReactiveX/RxSwift: Reactive Programming in Swift

Reactive Programming in Swift. Contribute to ReactiveX/RxSwift development by creating an account on GitHub.

github.com

아래의 링크로 설치 가능합니다!

 

그 후, RxSwift를 사용해야 하는데 Rx는 Observables이나 Subcribe나 워낙 다양한 종류가 있습니다..

 

 

 

1. Observables<Data>

 먼저 Observables는 객체에 이벤트나 값 추가, 수정 등과 같은 것을 가능하게 해 줍니다.

onNext(data), onComplete(), onError(error)

 

API.download(file: "http://www...")
  .subscribe(onNext: { data in
    // Append data to temporary file
  },
  onError: { error in
    // Display error to user
  },
  onCompleted: {
    // Use downloaded file
  })

 

2. Operators

옵저버에서 나온 결과를 Rx연산자를 통해 입력, 출력이 가능합니다. 

 UIDevice.rx.orientation
  .filter { value in
    return value != .landscape
  }
  .map { _ in
    return "Portrait is the best!"
  }
  .subscribe(onNext: { string in
    showAlert(text: string)
  })

 

-> filter는 가로가 아닌 값만 통과

-> .map에서 문자열을 리턴

-> 위에서 문자열 받아서 alert실행

 

3. Schedulers

기존에 사용하던 DispatchQueue와 기능이 동일합니다.

 

4. RxCocoa

RxCocoa란 UIKit 및 Cocoa 개발을 지원하는 클래스를 보유하고 있는 RxSwift 동반 라이브러리입니다.

다양한 UI구성요소에 대한 반응형 확장 기능을 추가하여 UI에 이벤트를 추가할 수 있습니다.

 

toggleSwitch.rx.isOn
  .subscribe(onNext: { isOn in
    print(isOn ? "It's ON" : "It's OFF")
  })

 

RxSwift가 참 종류도 다양하고 사용하는 방법도 다양한데, 모두 마스터하는  그날까지..🔥

 

저도 공부하는 단계라 공식문서와 자료들을 정리해서 포스팅하고 있습니다. 제 포스팅 읽어보시고 잘못된 점이 있다면 언제든지 지적해 주세요!

 

 

위 포스팅은 아래의 글을 참고해 작성되었습니다.

#참고


https://ios-development.tistory.com/95

 

[RxSwift] 1. RxSwift의 개념

1. RxSwift란? ‘RxSwift is a library for composing asynchronous and event-based code by using observable sequences and functional style operators, allowing for parameterized execution via schedulers.’ By Marin Todorov. ‘RxSwift - Reactive Programming

ios-development.tistory.com

 

https://babbab2.tistory.com/182

 

RxSwift) RxSwift가 도대체 뭔데요(Reactive Programming)

안녕하세요!! 소들입니다 :> 저는 Let's Swift 티케팅에 낙제하고 퇴근 후 포스팅이나 쓰는 사람입니다 ㅋㅋ;;;;; 아쉬움은 뒤로하고 RxSwift의 드디어 첫 걸음마 포스팅을 써보려고 합니다 RxSwift... 어

babbab2.tistory.com

 

728x90
반응형
LIST

'Swift 이론' 카테고리의 다른 글

Swift - CompositionalLayout  (2) 2024.04.13
Swift - Realm  (0) 2024.04.12
Swift - WMO 전체 모듈 최적화  (0) 2024.04.11
Swift - Concurrency  (0) 2024.04.11
Swift - GCD  (0) 2024.04.11