iOS/RxSwift
[RxSwift] PrimitiveSequenceType
최지철
2024. 9. 30. 14:07
반응형
PrimitiveSequenceType이란?
PrimitiveSequenceType은 RxSwift에서 제공하는 프로토콜로, 기본적인 시퀀스 타입을 정의합니다.
단일한 요소 또는 이벤트를 처리하는 시퀀스로, Single, Maybe, Completable 세 가지 타입이 있습니다.
PrimitiveSequenceType의 종류와 사용 방법
1. Single
Single은 하나의 요소 또는 에러를 방출하고 종료되는 시퀀스입니다. 주로 네트워크 요청이나 데이터베이스 조회 등 한 번의 결과를 필요로 하는 작업에 사용됩니다.
- 성공 이벤트: 단일 요소를 방출하고 완료
- 실패 이벤트: 에러 방출
예제 코드:
func fetchUserProfile(userID: String) -> Single<UserProfile> {
return Single.create { single in
// 네트워크 요청 시뮬레이션
let success = true
if success {
let profile = UserProfile(id: userID, name: "홍길동")
single(.success(profile))
} else {
single(.failure(NetworkError.notFound))
}
return Disposables.create()
}
}
사용 방법:
fetchUserProfile(userID: "1234")
.subscribe(
onSuccess: { profile in
print("사용자 프로필: \(profile)")
},
onFailure: { error in
print("에러 발생: \(error)")
}
)
.disposed(by: disposeBag)
2. Completable
Completable은 요소를 방출하지 않고 완료 또는 에러 이벤트만을 방출하는 시퀀스입니다. 데이터 저장이나 로그아웃 등 결과 값이 필요 없는 작업에 적합합니다.
- 완료 이벤트: 작업 완료를 알림
- 실패 이벤트: 에러 방출
예제 코드:
func saveUserProfile(_ profile: UserProfile) -> Completable {
return Completable.create { completable in
// 데이터 저장 시뮬레이션
let success = true
if success {
completable(.completed)
} else {
completable(.error(DatabaseError.saveFailed))
}
return Disposables.create()
}
}
사용 방법:
saveUserProfile(profile)
.subscribe(
onCompleted: {
print("프로필 저장 완료")
},
onError: { error in
print("저장 에러: \(error)")
}
)
.disposed(by: disposeBag)
3. Maybe
Maybe는 요소를 방출할 수도 있고 안 할 수도 있으며, 완료 또는 에러 이벤트를 방출할 수 있는 시퀀스입니다. 데이터가 존재할 수도 있고 없을 수도 있는 상황에 유용합니다.
- 성공 이벤트: 단일 요소 방출 후 완료
- 완료 이벤트: 요소 없이 완료
- 실패 이벤트: 에러 방출
예제 코드:
func fetchCachedData(forKey key: String) -> Maybe<Data> {
return Maybe.create { maybe in
// 캐시 데이터 조회 시뮬레이션
let cachedData: Data? = nil
if let data = cachedData {
maybe(.success(data))
} else {
maybe(.completed)
}
return Disposables.create()
}
}
사용 방법:
fetchCachedData(forKey: "user_profile")
.subscribe(
onSuccess: { data in
print("캐시된 데이터: \(data)")
},
onCompleted: {
print("캐시 데이터 없음")
},
onError: { error in
print("에러 발생: \(error)")
}
)
.disposed(by: disposeBag)
PrimitiveSequenceType을 사용하는 이유
- 명확한 의도 표현: 각 타입은 특정한 상황에 맞게 설계되어 있어, 코드의 의도를 더 명확하게 표현할 수 있습니다.
- 코드 가독성 향상: 불필요한 처리나 옵저버 설정을 최소화하여 코드가 더욱 간결해집니다.
- 에러 처리 간소화: 각 타입은 성공과 실패 이벤트를 명확하게 구분하므로 에러 처리가 쉬워집니다.
반응형