RxSwift
Swift 언어로 작성된 함수형 반응형 프로그래밍을 위한 라이브러리
(옵저버블 시퀀스와 이벤트 기반 프로그래밍을 간편 처리 지원)
library
라이브러리(Library)는 프로그래밍에서 재사용 가능한 코드 모음을 말합니다.
일반적으로 특정 기능을 수행하는 코드의 모음이며,
다른 프로그램이나 프로젝트에서 사용할 수 있도록 설계됨
반복적이고 표준화된 작업을 수행하는 코드를 재사용하여 개발 시간 단축 + 효율적인 개발 가능
[라이브러리는 다양한 형태와 목적으로 제공]
표준 라이브러리(Standard Library)
대부분의 프로그래밍 언어는 기본적으로 제공하는 표준 라이브러리가 있습니다.
이는 언어 자체에서 제공하는 기본 함수, 자료구조, 파일 입출력, 문자열 처리 등의 기능을 포함합니다.
(ex. Swift의 표준 라이브러리는 Swift 언어와 함께 제공되는 기본 기능들을 포함)
서드파티 라이브러리(Third-party Library)
개인 또는 조직이 개발한 외부 라이브러리로, 다른 프로그래머들이 사용할 수 있도록 공개됨
네트워킹, 데이터베이스 연결, UI 구성 요소, 이미지 처리, 암호화, 데이터 분석 등 다양한 기능 제공
대부분의 언어에서는 해당 언어나 플랫폼에 맞는 다양한 서드파티 라이브러리가 존재함
라이브러리는 보통 함수, 클래스, 모듈, 프레임워크 형태로 제공
(이를 프로젝트에 추가하고 활용하여 개발자가 직접 해당 기능을 구현하지 않아도 무관)
Dependency Manager(의존성 관리 도구)
프로젝트에서 사용하는 다양한 라이브러리 및 외부 의존성들을 관리 및 프로젝트에 효과적으로 통합하기 위한 도구
이러한 도구를 사용하면 라이브러리를 손쉽게 가져오고 버전을 관리,
프로젝트에서 필요로 하는 의존성들을 효율적으로 관리할 수 있습니다.
대표적인 Dependency Manager
CocoaPods
iOS 및 macOS 애플리케이션을 위한 Swift/Objective-C 프로젝트의 의존성 관리 도구
라이브러리를 손쉽게 가져올 수 있고, 프로젝트 설정을 간소화 가능
Carthage
CocoaPods와 유사, 프레임워크 빌드 사용 의존성 관리 도구
(빌드된 프레임워크를 프로젝트에 수동으로 추가필요)
Swift Package Manager (SPM)
Swift 프로젝트의 패키지 의존성 관리 도구
애플의 공식 지원을 받음, 오직 Swift 프로젝트에서 사용
RxSwift 사용법 (순서대로 진행)
RxSwift 란?
ReactiveX(Reactive Extensions) 패턴의 Swift 버전
Swift 언어로 작성된 반응형 프로그래밍을 위한 라이브러리입니다.
데이터 스트림과 이를 다루는 연산자들을 통해 비동기 및 이벤트 기반 프로그래밍 지원
Observable(옵저버블)
데이터 스트림을 나타내는 타입, 데이터의 변화 or 이벤트를 방출(emit)
이벤트 시퀀스를 발생시키는데 사용
(next, error, completed 와 같은 종류가 존재)
Observer(옵저버)
방출된 데이터나 이벤트에 반응하는 객체로,
이를 구독(subscribe)하여 데이터의 변화를 감시 및 처리
Operator
"Observable(옵저버블)"을 변형 및 조작하는 함수
데이터 스트림을 조작하기 위해 사용
RxSwift에는 많은 다양한 연산자들이 포함되어 있어서
데이터를 필터링하거나 변환, 결합, 조작하는 등의 작업을 수행
Schedulers
비동기 코드의 실행 관리에 사용, 작업이 어느 스레드에서 실행되는지 제어
메인 스레드에서 UI 업데이트를 수행, 백그라운드 스레드 작업 수행 등 일을 스케줄링할 때 사용
// Swift 예시
import Foundation
class DataModel {
var textValue: String = ""
func updateText(to newValue: String) {
textValue = newValue
print("Value updated: \(textValue)")
}
}
let dataModel = DataModel()
dataModel.updateText(to: "Hello, Swift!")
dataModel.updateText(to: "Another value")
/*
출력
Value changed to: Hello, Swift!
Value changed to: Another value
*/
// swift의 didset을 이용한 예시
class DataModel {
var textValue: String = "" {
didSet {
print("Value updated: \(textValue)")
}
}
}
let dataModel = DataModel()
func changeText(to newValue: String) {
dataModel.textValue = newValue
}
changeText(to: "Hello, Swift!")
changeText(to: "Another value")
/*
출력
Value changed to: Hello, Swift!
Value changed to: Another value
*/
// RxSwift의 예시
import Foundation
import RxSwift
import RxCocoa
/*
BehaviorSubject와 textValueSubject를 볼 수 있는데,
이는 BehaviorSubject에서 asObservable로 변환을 한 것
즉, Subject -> Observable 관찰가능한 형태로 변환을 해준 것입니다.
이후 dataModel을 생성해주고 dataModel의 textValue,
즉, "var textValue: Observable<String> {" 이 프로퍼티로 접근을 한 것을 이야기합니다.
그리고 이 프로퍼티는 Subject의 변경사항을 Observable로 전파해주고 있습니다.
그래서 textValue.subscribe 구독한다는 것이죠 "var textValue: Observable<String> {" 구간의
변경 사항을 말입니다. (관찰하고 있다는 의미)
그리고 onNext를 사용해서 다음에 발생한 이벤트가 newValue in 이라는 클로저로 들어오는 것을 말합니다.
결과적으로 이 클로저는 <String>이 들어오는 것을 이야기합니다.
*/
class DataModel {
let textValueSubject = BehaviorSubject<String>(value: "")
var textValue: Observable<String> {
return textValueSubject.asObservable()
}
}
let dataModel = DataModel()
let disposable = dataModel.textValue.subscribe(onNext: { newValue in
print("Value changed to: \(newValue)")
})
dataModel.textValueSubject.onNext("Hello, RxSwift!")
dataModel.textValueSubject.onNext("Another value")
/*
dataModel.textValueSubject는 "let textValueSubject" 여기에
onNext("Hello, RxSwift!") 이를 대입을 해주게 되면 "var textValue"는 textValueSubject를
관찰하면서 textValueSubject.asObservable() 즉, asObservable로 바꿔 줍니다.
이렇게 Observable로 바꿔준 것을 let disposable이 dataModel.textValue.subscribe
즉, 구독을 해주고 있는 것 입니다.
그래서 "Hello, RxSwift!"는 newValue in 으로 들어가게 되고,
print("Value changed to: \(newValue)") 이 구문이 찍히게 되는 것 입니다.
*/
/*
출력
Value changed to:
Value changed to: Hello, RxSwift!
Value changed to: Another value
*/
DataModel 클래스
"BehaviorSubject"를 사용 -> "textValueSubject"를 초기화,
이를 "textValue"의 "Observable"로 반환
[ let disposable = dataModel.textValue.subscribe(onNext: { newValue in ... }) ]
"subscribe" 메서드는 "textValue"의 Observable을 구독,
값의 변경이 있을 때마다 "onNext" 클로저 내의 코드를 실행
[ dataModel.textValueSubject.onNext("Hello, RxSwift!") ]
"textValueSubject"의 "onNext"를 호출 -> "Hello, RxSwift!"를 방출
이로 인해 구독 중인 "subscribe"에서 "Value changed to: Hello, RxSwift!"를 출력
[ dataModel.textValueSubject.onNext("Another value") ]
위 ("Hello, RxSwift!")과 동일한 방식의 값의 변경과 해당 변경 사항에 대한 출력을 진행
'IOS > Swift-Study' 카테고리의 다른 글
[Swift-Study] IOS 앱 개발 입문 1주차 - Xcode (0) | 2024.03.29 |
---|---|
[Swift-Study] IOS 앱 개발 입문 1주차 - IOS 개요 (0) | 2024.03.29 |
[Swift-Study] 심화 문법종합반 2주차 5일차 정리 - Combine 맛보기 (0) | 2024.03.28 |
[Swift-Study] 심화 문법종합반 2주차 5일차 정리 - 비동기와 네트워킹 (0) | 2024.03.28 |
[Swift-Study] 심화 문법종합반 2주차 5일차 정리 - 제네릭 (2) | 2024.03.27 |