회사 프로젝트는 RxSwfit로 이루어져 있다
그래서 현재 감으로 코드를 작성하고 있는 중이다(다행히 안되거나 그러진 않지만)
구조적으로 더 잘 파악하고 메모리 누수가 이루어 지지 않도록 하루에 하나씩 공부하기 위해서 RxSwfit를 정리하고자 한다
https://github.com/ReactiveX/RxSwift
여기서 보고 차차 정리하는걸로..
요즘 다들 SwiftUI쓰는데..
내년 5월달에 재 작업한다니까
그때까지만 공부하는걸로 ^^
우선 첫 날은 왜 쓰는가에 대해서 정리하고자 한다
RxSwift는 **Reactive Programming(반응형 프로그래밍)**을 iOS 앱에 구현하기 위한 라이브러리로, 비동기 작업과 이벤트 기반 프로그래밍을 보다 체계적으로 관리할 수 있도록 도와줍니다. 비동기 작업이 많아질수록 코드가 복잡해지고, 유지보수가 어려워지는 문제를 해결하는 데 적합합니다. 아래는 RxSwift를 사용하는 이유를 간단히 정리한 내용입니다.
1. 비동기 작업 관리
iOS 앱에서는 네트워크 요청, 사용자 입력, 타이머 등 비동기 작업이 빈번하게 발생합니다. RxSwift는 이러한 작업을 **Stream(데이터 흐름)**으로 관리하여 복잡한 로직을 간결하고 명확하게 처리할 수 있도록 지원합니다.
2. 코드 간소화
일반적인 iOS 개발에서는 Delegate, NotificationCenter, KVO 등 다양한 방식으로 이벤트를 처리합니다. RxSwift는 이를 하나의 통일된 방식으로 작성할 수 있도록 도와주며, 코드의 일관성을 높이고 유지보수를 쉽게 만듭니다.
3. 이벤트 기반 프로그래밍
RxSwift는 사용자 동작, 네트워크 응답 등 다양한 이벤트를 관찰하고, 이에 반응하는 코드를 작성할 수 있게 해줍니다. 이 접근 방식은 특히 UI 상태 관리나 데이터 흐름 처리에 효과적입니다.
4. 데이터 흐름 제어
RxSwift는 데이터를 다루는 다양한 연산자(Operators)를 제공합니다. 데이터를 필터링하거나 변환하고, 여러 데이터를 결합하는 작업을 효율적으로 수행할 수 있습니다. 예를 들어, 네트워크에서 가져온 데이터를 변환하거나, UI 이벤트를 조합할 때 유용합니다.
5. 컴포넌트 간 결합도 낮추기
RxSwift의 Subject나 Relay를 사용하면, View와 ViewModel 간 데이터를 주고받는 작업이 더 간결해집니다. 이는 컴포넌트 간의 결합도를 낮춰 코드의 재사용성을 높이고, 유지보수를 용이하게 만듭니다.
6. MVVM 패턴에 적합
RxSwift는 MVVM 아키텍처와 잘 맞습니다.
- ViewModel에서 데이터를 Observable로 정의하면 View는 이를 구독(Subscribe)하여 UI를 자동으로 업데이트할 수 있습니다.
- 이러한 구조는 테스트 가능성을 높이고, 코드의 의존성을 줄이는 데 효과적입니다.
7. Cross-platform 호환성
RxSwift는 ReactiveX 철학을 기반으로 만들어졌으며, Android의 RxJava, JavaScript의 RxJS 등과 동일한 스타일을 지원합니다. 여러 플랫폼에서 일관된 코딩 스타일을 유지할 수 있는 장점이 있습니다.
import RxSwift
let disposeBag = DisposeBag()
Observable.of(1, 2, 3, 4, 5)
.filter { $0 % 2 == 0 } // 짝수만 필터링
.map { $0 * 2 } // 값을 2배로 변환
.subscribe(onNext: {
print($0) // 출력: 4, 8
})
.disposed(by: disposeBag)
RxSwift를 고려해야 할 상황
- 비동기 작업이 복잡하게 얽혀 있어 체계적으로 관리가 필요할 때
- 네트워크, 사용자 입력, UI 상태 변화 등 다양한 이벤트를 통합적으로 처리하고자 할 때
- MVVM 패턴을 사용하며 View와 ViewModel 간 의존성을 줄이고 싶을 때
- 데이터 흐름 제어와 에러 처리를 단순화하려는 경우
결론
RxSwift는 비동기 작업과 이벤트 기반 프로그래밍에서 발생하는 복잡성을 줄이고, 보다 명확하고 일관된 코드 작성 방식을 제공합니다. 다만, 학습 곡선이 존재하기 때문에 프로젝트의 요구사항에 따라 도입 여부를 신중히 결정하는 것이 중요합니다. RxSwift가 반드시 필요한 경우가 아니라면 대안으로 Combine과 같은 더 가벼운 도구를 고려할 수도 있습니다.
'RxSwift' 카테고리의 다른 글
RxSwift | distinctUntilChanged (0) | 2024.12.11 |
---|