ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • RxSwift - Trait
    Programming/RxSwift 2022. 3. 24. 21:07

     

    안녕하세요 BeePeach입니다 :)

     

    오늘은 Trait에 대해서 공부해보도록 하겠습니다.

     

    Trait는 이전에 우리가 공부한 기본적인 Observable보다 좀 더 특정된 기능에 집중한 Observable입니다.

    Trait들도 결국에는 Observable입니다. 그래서 Trait를 쓰는 코드에는 우리가 공부했던 Observable을 사용해도 아무런 문제가 없습니다.

     

    하지만 Trait를 사용하는 이유가 존재하겠죠?

    Trait를 이용하면 간편하고 직관적인 코드를 만들 수 있습니다.

     

    오늘은 RxSwift에서 제공하는 Trait에 대해서 공부해볼 예정입니다.

    그 이후 RxCocoa를 공부하고 난 뒤에 RxCocoa에서 제공하는 또 다른 여러 Trait를 살펴보도록 하겠습니다.

    일반적으로 RxSwift에서 제공하는 Trait보다 RxCocoa에서 제공하는 Trait를 더 많이 사용합니다.

     

    오늘은 RxSwift에서 제공하는 Trait가 있구나~ 정도만 알고 넘어가셔도 좋습니다.

     

    RxSwift에서 제공하는 Trait에는 3가지가 있습니다.

    • Single
    • Completable
    • Maybe

    그럼 각각에 대해 조금 더 자세히 살펴보도록 하겠습니다.

     

     


     

    Single

     

     

    Single은 success(value), failure(error) 이벤트를 방출합니다.

    둘 다 처음 보는 이벤트죠??

    success는 next와 completed가 결합된 이벤트입니다.

    그리고 failure는 error 이벤트와 같습니다.

     

    Trait는 Observable이라고 했는데... Observable에는 이런 이벤트는 없었잖아!라고 생각할 수 있습니다.

    이렇게 이벤트가 다른 이유는 코드를 보면 이해할 수 있습니다.

     

     

    Single의 타입메서드인 create 오퍼레이터를 확인해보면 우리가 이전에 사용하던 create 오퍼레이터와 다른 점이 보입니다.

    바로 클로저의 파라미터로 그냥 Observer가 아닌 SingleObserver를 받습니다.

     

    그럼 SingleObserver는 뭔지 궁금하니 찾아가보겠습니다.

     

     

    SingleObserver는 SingleEvent<Element> -> Void 의 typealias입니다.

    그럼 여기서 SingleEvent는 또 뭔데?? 한다면 바로 위에 적혀 있습니다.

    Result<Element, Swift.Error>의 typealias입니다.

     

    한마디로 Result Type이라는 겁니다.

     

    다시 생각해보니 success와 failure는 Result Type에서 봤던 친구들입니다.

    그럼 이제 이 이벤트들이 어떻게 되어있는지 확인해보겠습니다.

     

     

    success일 때는 next에 element들 담아 방출하고 completed 이벤트를 바로 방출합니다.

    즉 success는 성공한다면 데이터를 담아서 보내겠어! 라는 의미를 가집니다.

     

    그럼 failure라면? 그냥 실패하고 error를 담아서 보내겠어! 라는 의미입니다.

     

    정리해서 다시 말하자면 Single은 성공하거나 실패하거나 둘 중에 하나밖에 없습니다. 그리고 바로 종료됩니다.

    그래서 일회용 프로세스에 적합합니다.

     

    예를 들어 데이터 다운로딩이나 disk로부터 로딩하는 작업등이 있습니다.

     

     

     

     

    생성해보기

    Observable에서 create 메서드를 사용한 것처럼 사용하면 됩니다.

    다른 점은 Observable에서는 on을 사용해서 이벤트를 전달했지만 Single에서는 on을 사용하지 않습니다.

    Single Observer는 SingleEvent<Element> -> Void 이므로 SingleEvent 즉, ResultType을 전달해야 합니다.

     

     

     


     

    Completable

     

     

    Completable은 completd, error(error) 이벤트를 방출합니다.

    어떻게 구현되어 있는지 코드를 확인해 보겠습니다.

     

     

    중요한 점은 completed라면 completed 이벤트를 전달하고

    error라면 error 이벤트를 전달한다는 점입니다.

     

    즉 next 이벤트가 없어서 데이터를 담아 보낼 수 없습니다.

    주로 File 읽기와 같은 성공, 실패 여부만을 확인할 때 사용합니다.

     

    Single과의 차이는 Single은 성공했다면 데이터를 담아 보낼 수 있고 Completable은 데이터를 담지 않고 성공, 실패만 따집니다.

    그리고 ResultType을 사용하지 않았습니다.

     

     

     

     

    생성해보기

    CompletableObserver는 CompletableEvent -> Void 타입의 alias입니다.

    그래서 이벤트를 전달할 때 위 예시와 같이 전달하게 됩니다.

     

     


     

    Maybe

     

    Maybe는 Single과 Completable의 결합입니다.

    success(value), completed, error(Error) 이벤트를 방출합니다.

     

     

    코드를 보면 Single과 Completable을 섞은 것 같습니다.

    Single과는 다르게 ResultType이 아니라 Completable과 같이 enum으로 만들어진 Event를 방출합니다.

     

    대체적으로 completed와 error만을 보내는데 가끔 성공했을 때 데이터를 같이 보내야 하는 경우가 생긴다면 사용합니다.

     

     

    생성해보기

     

    사용하는 방법은 Completable과 흡사합니다.

     

     


    참고 자료

     

    https://www.raywenderlich.com/books/rxswift-reactive-programming-with-swift

     

    RxSwift: Reactive Programming with Swift

    <p>Leverage the power of RxSwift in your reactive apps!</p> <p>This book is for iOS developers who already feel comfortable with iOS and Swift, and want to dive deep into development with RxSwift.</p> <p>Start with an introduction to the reactive programmi

    www.raywenderlich.com

     

     

    https://kxcoding.com

     

    여러분의 새로운 도전을 응원합니다 | KxCoding

    Mastering SwiftUI 더 적은 코드로, 더 멋진 UI 만들기

    kxcoding.com

     

     

     

     

    728x90

    'Programming > RxSwift' 카테고리의 다른 글

    RxSwift - Subject와 Relay  (0) 2022.03.25
    RxSwift - Observable factory  (0) 2022.03.21
    RxSwift - Disposable  (0) 2022.03.17
    RxSwift - Subscribe  (0) 2022.03.17
    RxSwift - Observable  (0) 2022.03.05
Designed by Tistory.