안녕하세요!
RxSwift 어떻게 공부해야하나 고민하다가 발견한 영상을 따라가면서
RxSwift 공부를 시작해보려고 합니다.
(항상 좋은 자료들을 공개해주시는 분들께 정말 많이 감사드립니다.)
https://www.youtube.com/watch?v=w5Qmie-GbiA&t=852s
RxSwift란?
먼저 RxSwift를 왜 공부하는지, 그리고 RxSwift가 뭔지 알아야겠죠?
ReactiveX 공식 사이트에서는 스스로를 이렇게 정의하고 있습니다.
해석하자면 다음과 같습니다.
리액티브X ReactiveX는 observable 시퀀스를 사용하여 비동기 및 이벤트 기반 프로그램을 구성하기 위한 라이브러리입니다. 데이터 및/또는 이벤트 시퀀스를 지원하기 위해 관찰자 패턴을 확장하고 저수준 스레딩, 동기화, 스레드 안전, 동시 데이터 구조 및 비차단 I/O와 같은 것들에 대한 우려를 추상화하면서 시퀀스를 선언적으로 함께 구성할 수 있는 연산자를 추가합니다.
음 아직 해석해도 감이 잘 안오는데 제일 핵심은 이겁니다.
비동기 및 이벤트 기반 프로그램을 구성하기 위한 라이브러리입니다.
1. 비동기
: 강의에 나오는 내용인데 곰튀김 님께서
"RxSwift는 Async한 작업을 간결하게 사용하기 위해 사용한다...이게 끝이다."
라고 말씀하시는 부분이 있습니다.
iOS의 쓰레드에 대해 공부하면 나오는 내용인데,
DispatchQueue.global이나 DispatchQueue.main처럼
쓰레드를 나누는 코드를 한번쯤은 보신적이 있으실 겁니다!
그런데 여기서 비동기를 위해 .async를 붙이는 경우 그만큼 쓰레드를 새로 생성하게 됩니다.
과하게 쓰레드가 생성되면 thread explode가 발생한다거나 하는 문제점이 생기고
이런 문제점을 해결하기 위해 async / await 같은 Swift Concurrency가 나오기도 했죠.
아무튼 이렇게 쓰레드를 나눠서 작업해서 동기/비동기 처리가 가능하긴 합니다.
그런데 앞서 언급한 thread explode와 복잡한 비동기 코드에서 취소나 재시도처리 처럼
네이티브로 대응하기에 불편/복잡한 부분을 RxSwift를 이용하면 간결하게 구현 가능하다고 합니다.
2. 이벤트 기반 프로그래밍
: 이름(ReactiveX)처럼 반응형 기반 프로그래밍이라고도 할 수 있을 것 같습니다.
RxSwift에서 Observable은 이벤트를 송출(Stream) 합니다.
여기서 이 이벤트를 구독(Subscribe)한 객체가 있다면 대응하는 코드를 짜서
이벤트에 대응할 수 있습니다.
설명이 조금 어려운데,
기존에 특정 변수(numA: Int)의 값으로 맞춘 Label이 있을 때,
이 값이 0 -> 3으로 바뀌었다고 가정해봅시다.
그러면 다음과 같은 흐름으로 코드가 진행됩니다.
1. numA = 3 (numA의 값이 바뀜)
2. Label.text = numA (레이블의 값을 바꿈)
RxSwift를 사용해 이벤트 기반 프로그래밍을 한다면
numA가 바뀌는 이벤트를 Label이 구독해서 바뀌는 시점에
Label.text = numA로 코드를 짠다면
1. numA = 3 (numA의 값이 바뀜) => Label.text = numA (레이블의 값을 바꿈)
처럼 한번에 작동하도록 코드를 짜는것이 가능해집니다.
설치
이제 RxSwift가 뭔지 알았으니 설치를 해보겠습니다.
RxSwift는 공식문서의 정의에도 나와있듯이 라이브러리입니다.
xcode에서 라이브러리를 사용하는 방법으로 크게 2가지를 들 수 있는데요,
Swift Package Manager와 CocoaPods를 사용하는 방법이 있습니다.
Swift Package Manager를 사용하면 설치가 훨씬 편하고
워크스페이스를 사용하지 않아도 되서 성능적으로도 이점이 있는데요,
물론 RxSwift도 Swift Package Manager로 설치가 가능하지만
critical한 버그가 있고 아직 해결되지 않았다는 무시무시한 안내가 있으니
가급적 CocoaPods로 설치해보도록 합시다...
(CocoaPods가 설치되어 있다는 전제로 설명하겠습니다)
CocoaPods를 사용한 방법은 다른 라이브러리 설치와 똑같습니다!
1. 터미널로 해당 프로젝트 폴더로 경로 이동(명령어: cd 경로)
2. pod init으로 Podfile 생성(아래 사진처럼 Podfile이 생성됩니다)
3. Podfile에 들어가 RxSwift 및 RxCocoa 텍스트 입력
공식 깃허브의 안내와 내용이 조금 다른데 저는 저렇게 입력해서 되었습니다!
4. 해당 프로젝트 폴더 경로에서 pod install 입력(끝!)
간단하죠? 아래와 같이 파일들이 생성되었을텐데,
이제 xcworkspace로 작업을 하시면 됩니다.
**혹시 아래와 같은 에러가 발생한다면**
프로젝트 => Build Settings => User Script Sandboxing => No로 설정해주시면 됩니다. (진짜 끝!)
이제 다음 글부터는 간단한 사용법과 개념?들을 짚어보겠습니다.
감사합니다.
참고한 글들
https://www.youtube.com/watch?v=w5Qmie-GbiA&t=852s
https://velog.io/@gnwjd309/RxSwift-1
[RxSwift] 1. RxSwift를 알아보자
✧٩(•́⌄•́๑)و ✧
velog.io
https://babbab2.tistory.com/182
RxSwift) RxSwift가 도대체 뭔데요(Reactive Programming)
안녕하세요!! 소들입니다 :> 저는 Let's Swift 티케팅에 낙제하고 퇴근 후 포스팅이나 쓰는 사람입니다 ㅋㅋ;;;;; 아쉬움은 뒤로하고 RxSwift의 드디어 첫 걸음마 포스팅을 써보려고 합니다 RxSwift... 어
babbab2.tistory.com