1. Traits

Trait를 설명하는 처음 부분에는 아래와 같은 내용으로 설명을 시작한다

<aside> ⭐ Swift는 애플리케이션의 정확성과 안정성 향상시키고 Rx를 보다 직관적이고 직접적인 경험으로 사용하는데 사용할 수 있는 강력한 유형 시스템을 갖추고 있습니다. Traits는 모든 경계에서 사용할 수 있는 원시 Observable과 비교할 때 인터페이스 경계에서 observable 프로퍼티를 전달하고 보장하며, 문법적으로 더 쉽고 구체적인 사용 사례를 타겟팅 하는데 도움이 됩니다

</aside>

→ 음… 자 대충 정리를 해봅시다. 제일 핵심 문장은

원시 Observable과 비교할 때 더 쉽고 구체적인 사용 사례를 타겟팅 하도록 돕는게 Traits 라는거 같은데요!

왜 그렇게 설명하는지 Traits의 종류인 Single , Completable , Maybe 를 살펴보면서 알아보도록 합시다!

2. Single

Observable의 변형으로 일련의 요소를 방출하는 대신 항상 단일 요소 or 오류를 방출하도록 보장합니다.

Single이 정의되어 있는 코드를 살펴보면 아래와 같습니다.

create하는 과정은 기존 observable과 같지만 event가 success와 failure로 나뉘는데요!

success: onNext와 onCompleted / failure: onError를 처리하고 있는 것을 볼 수 있습니다.

⇒ 즉 기존 observable과 다르게 부수 작용을 공유하지 않고, 정확히 하나의 요소 혹은 에러만 방출하는게 Traits로써의 Single의 장점이네요!

public static func create(subscribe: @escaping (@escaping SingleObserver) -> Disposable) -> Single<Element> {
        let source = Observable<Element>.create { observer in
            return subscribe { event in
                switch event {
                case .success(let element):
                    observer.on(.next(element))
                    observer.on(.completed)
                case .failure(let error):
                    observer.on(.error(error))
                }
            }
        }
        
        return PrimitiveSequence(raw: source)
    }

SingleEvent

Single 또한 내부적으로 observable로 이루어져 있기 때문에 구독을 하여 이벤트를 처리할 수 있습니다. 이때 이벤트의 타입은 어떨까요?

Result 타입으로 성공했을 때는 요소를, 실패했을 때는 에러를 방출하는 것을 볼 수 있습니다.

public typealias SingleEvent<Element> = Result<Element, Swift.Error>

Single은 이러한 특징 때문에 HTTP 요청을 수행하는데 많이 사용됩니다.

서버통신을 통해 성공하면 → 서버에서 보내주는 값을 받아오고

                실패하면 → 배출한 error를 통해서 분기처리를 해줄 수 있기 때문이죠!