티스토리 뷰
개발을 하다 보면 비동기 이벤트를 많이 다루게 된다. 버튼을 눌렀을 때나,
api 호출을 했을 때 응답을 받아올 때 이외에도 여러 가지 기능에서 비동기 프로그래밍이 필요하다.
이 비동기 프로그래밍을 더 효과적으로 다룰 수 있는 RxSwift가 무엇인지에 대해 알아보자.
💡 RxSwift
RxSwift란 공식사이트에 들어가보면 비동기 작업과 데이터 스트림을 객체 형태로 쉽게 구성할 수 있도록 하고 Observable, 이러한 비동기 작업을 변환하고 구성하기 위한 메서드 모음을 제공한다고 설명하고 있다.
즉 비동기 프로그래밍과 이벤트 기반 프로그래밍을 쉽게 할 수 있도록 도와주는 반응형 프레임워크이다!
RxSwift의 공식문서에서는 observable 스트림에서 다양한 이벤트를 방송하고 구독할 수 있다고 설명하고 있다.
observable은 데이터나 이벤트의 변화를 감지하고 그 변화를 observer(관찰자)가 보고 있다가(=구독하고 있다가) 값이 변하면 해당 값으로 변경처리를 해준다.
즉, RxSwift는 Observable을 사용해 데이터의 변화를 감지하고, 그 변화를 Observer에 전달함으로써 반응형 프로그래밍하게 되는 것이다!
따라서 버튼 클릭이나, API 응답에 대한 이벤트를 실시간으로 구독하여 변화를 감지하면 변경된 값으로 처리할 수 있게 되는 것이다.
📍RxSwift의 핵심 3요소
1. Observable
RxSwift는 Observable을 사용해 데이터의 변화를 감지한다고 위에 설명했는데 Observable이 바로 관찰가능한 객체!!라는 것이다.
계속 관찰하고 있다가 어떤 데이터가 변할 때 변화가 발생할 때마다 Observer에게 그 변화를 알려주게 된다.
let text = Observable.just("Hello")
2. Observer
Observer는 Observable을 구독하여 처리하는 역할을 한다.
1번과 2번을 정리해서 보면 Observable은 변화를 감지해서 -> Observer에게 알려주고 Observer는 그 변경된 데이터로 처리하는 역할을 하게 되는 것이다.
text.subscribe(onNext: { value in
print(value) // 변경된 값을 출력
}, onError: { error in
print("Error: \(error)")
}, onCompleted: {
print("Completed")
})
여기서 Observable을 통해 text라는 값이 변경됐다는걸 받아서 값을 출력해 주고, 에러핸들링을 해줄 수 있게 된다!
subsribe에는 클로저로 OnError, onCompleted 외에도 OnNext, OnDisposed를 통해 데이터를 처리할 수 있도록 되어 있다.
3. Operators
Operators는 Observable에서 감지한(=방출된) 데이터를 변환하거나 필터링, 결합하는데 사용된다.
받은 데이터를 Map이나 filter를 사용해 정렬할 수도 있고, 이것도 마찬가지로 감지된 데이터를 어떻게 처리할 거냐!! 에 대한 것이다.
보통 아래 코드처럼 사용한다고 한다!
(코드로 구현해보면서 어떤 메서드가 있는지 찾아봐야 할 거 같다!)
text
.map { value in
return value.uppercased() // 데이터를 대문자로 변환
}
.subscribe(onNext: { value in
print(value) // 대문자로 변환된 값을 출력
})
✔️ 필요성
RxSwift가 존재한다고 해도 우리는 이미 SwiftUI나 UIKit을 사용해서 비동기 이벤트를 잘 처리해 왔는데
왜 RxSwift를 사용하는 게 비동기에 좋을까?라고 이해하지 못할 수도 있다.(나도 그랬다)
또한 구독을 해서 변경된 값을 감지하는 건 RxSwift만 가능한 게 아니라 Notification이나 Closure를 통해 잘 사용해 왔었다.
그럼 어떤 장점 때문에 RxSwift가 반응형 프로그래밍에서 더 효율적인지 알아보자!
1️⃣ 선언적인 방식으로 앱을 구축할 수 있다.
Notification이나 closure를 통해 작성하게 된다면, 각 이벤트들마다 따로 처리를 해줘야 되기 때문에 여러 이벤트들이 발생했을 때 코드가 길어지게 되어 가독성이 떨어질 수 있다.
반면 RxSwift는 Observable 통해 데이터를 처리하는 과정을 선언적으로 작성할 수 있게 되면서 복잡한 비동기 흐름들을 하나의 데이터 스트림으로 통합할 수 있어 코드가 간결해지고 추후 유지보수도 쉬워지게 된다.
2️⃣ 명령형 프로그래밍의 한계를 극복할 수 있다.
명령형 프로그래밍은 비동기 작업을 다룰 때 이 작업들이 언제 끝날지 예상하지 못한다. 따라서 실행 순서에 따른 관리가 잘 지켜져야 하고, 잘못하면 실행 순서가 꼬이게 되면 결과도 다르게 나온다는 것이다.
반면 이런 비동기 작업들을 RxSwift는 Observable를 통해 비동기적으로 데이터를 처리하고 그 결과를 차례대로 처리하여 이벤트가 발생하는 순서를 정확하게 제어할 수 있게 되는 것이다.
2탄은 예제로 알아보도록 하겠다!
아직 너무 어렵다 ㅎㅎㅎ..,,,
참고
https://github.com/ReactiveX/RxSwift
https://babbab2.tistory.com/182
'iOS' 카테고리의 다른 글
[iOS] CI/CD 알아보기 (fastlane 설치까지) (0) | 2024.11.17 |
---|---|
[iOS] RxSwift 예제로 알아보기 (2) (3) | 2024.11.07 |
[iOS] Unit test 테스트 코드 작성하기 (Quick / Nimble) (1) | 2024.10.04 |
[iOS] 퀵헬프 주석 (1) | 2024.09.09 |
[iOS] testflight 사용해보기 (0) | 2024.08.18 |
- Total
- Today
- Yesterday
- 스위프트
- swiftUI
- mlmodel
- mergeconflict
- 가장가까운같은글자
- 백준
- 병합충돌
- 코딩테스트
- Fastlane
- 16173
- 둘만의 암호
- rxswift
- ObservableObject
- securefield
- CustomCalendar
- XCTest
- combine
- MainActor
- ScrollViewReader
- 프로그래머스
- closure
- CoreData
- UIKit
- LazyVGrid
- Xcode
- ios
- imagepicker
- OSLog
- SWIFT
- 클로저
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |