WooKoo Blog

물과 같이

개발/개발

RxSwift: Chapter - 2[Observables]

WooKoo 2020. 10. 3. 18:26

해당 내용은 RxSwift Reactive Programming with Swift 원서를 따라 정리하였다.

 

틀린 내용이나 오역이 있다면 지적 부탁드립니다.

 

https://store.raywenderlich.com/products/rxswift

 

RxSwift: Reactive Programming with Swift

Leverage the power of RxSwift in your reactive apps! In this RxSwift book, you'll learn how to integrate RxSwift into real-world iOS apps.

store.raywenderlich.com

 

P43 ~

 


What is an observable?

 

옵저버블은 Rx의 심장이다.

 

Observable, Observable sequence, sequence, Stream 는 다 같은 말이다. 

 

다른 반응형 프로그래밍 환경에서 넘어온 개발자들이 스트림이라고 하는 경우도 있다.

 

(스트림은 옵저버블의 그 단락이라고해야하나 뭐 그런거를 말해서 뭐 결국 그게 그거인 것을 말한다.)

 

근데 시퀀스라고 부르는게 RxSwift에서는 맞다.

 

옵저버블은 특별한 힘을 가진 시퀀스일뿐이고

 

실제로 중요한 것은 비동기식이라는 것과 옵저버블이 일정기간 동안 만들어내는 이벤트

(이 이벤트는 숫자나 사용자정의 유형의 인스턴스와 같은 값이 포함되거나 탭과같은 동작도 인식될 수 있음)

 

 

 

 

 

왼쪽에서 오른쪽으로가는 화살표는 시간의 흐름을 표현한 것이다.

 

숫자가 적혀있는 동그라미는 시퀀스, 그안의 내용은 요소 (elements) 라고 보면 되겠다.

 

다이어그램을 보면 시간의 흐름에 따라 1을 통과하고 2를 통과하고 3을 통과한다.

 

어느 시점에서나 관찰이 가능하고 이것을 옵저버블의 라이프 사이클이라고 할 수 있다.

 

Lifecycle of an observable

위 다이어그램을 보면 세로의 선이 있는데 이것은 이 옵저버블의 끝을 의미한다.

 

3번의 탭 이벤트가 나타면 이 것은 끝이나고 이것을 우리는 Completed 이벤트 라고 부른다.

 

완료가 되면 더 이상 방출하지 않고 정상적으로 종료된다.

 

그러나 상황이 때론 잘못 될 수 있다.

 

위 다이어그램은 에러가 발생한 다이어그램이다.

 

빨간 X를 에러라고 표현했다.

 

오류가 발생하여 error 이벤트가 발생하면 Completed 이벤트와 마찬가지로 종료되고 더 이상 방출되지 않는다.

 

요약 ^-^

 

1. 옵저버블은 Elements를 포함하는 next 이벤트를 발생시킨다.

2. error 이벤트가 발생하여 종료되거나

3. completed 이벤트가 발생하면 종료된다.

4. 종료된 옵저버블은 더 이상 이벤트를 뿜지 않는다.

 

RxSwift 소스 코드에서 직접 예제를 본다면 이벤트는 이런 식의 열거형으로 표시되어 있다.

public enum Event<Element>{
	case next(Element)
    
    case error(Swift.Error)
    
    case completed
}

next 이벤트에는 Element 인스턴스가 포함 되어있음을 알 수 있고

error 이벤트에는 Swift.Error 가 인스턴스로 포함, completed 이벤트는 데이터가 포함되어 있지 않은 이벤트이다.

이해가 어느정도 되었다면 이제 옵저버블을 만들어 보도록 하자.

 

Creating observables

플레이 그라운드를 실행시켜서 아래 코드 추가하세용~

example(of: "just, of, from"){

	let one = 1
    let two = 2
    let three = 3
    
    let observable: Observable<Int> = Observable<Int>.just(one)
}

 

1. 3개의 Int 타입을 생성했다.

2.  Int 타입의 Observable이 생성되었다. just 메소드는 하나의 파라미터를 받아 하나의 이벤트를 발생 시킨다.

 

우리는 just와 같은 옵저버블 메소드들을 오퍼레이터라고 한다.

이 오퍼레이터를 통해서 다음에 어떤 연산자를 사용하고 확인할지 추측할 수 있다.

 

아래 코드를 클로져 뒷부분에 추가하도록 하자.

let observable2 = Observable.of(one, two, three)

위 코드에서는 옵저버블에 대한 타입을 지정하지 않았습니다.

우리는 원, 투, 쓰리를 통해서 타입추론을 통해 옵저버블이 [Int] 라고 생각할 수 있다.

observable2를 Option- 클릭하면 배열이 아닌 Int의 Observavle 임을 알 수 있다.

of 연산자는 전달 된 요소에 유형을 파라미터로 사용한다.

 

만약 옵저버블 배열을 만들고 싶다면 아래 코드를 추가하여 of 에 전달 가능하다.

 

let observable3 = Observable.of([one, two, three])

 

observable3을 Option 클릭하면 실제로는 [Int]의 Observable 임을 알 수 있다. Just 오퍼레이터는 배열을 단일 element로 취할 수 있다.

 

다음은 from 오퍼레이터를 사용해보자 아래 코드 추가하세용~

 

let observable4 = Observable.from([one, two, three])

 

from 오퍼레이터는 배열 요소로 각각의 타입의 인스턴스를 만든다.

observable4 를 Option 클릭하면 [Int] 가 아니라 Int의 observable 임을 알 수 있다.

from 오퍼레이터는 오직 배열을 가져온다.

 

너의 콘솔은 쓸모없는 것이당 흫흫

 

구독을 배워야할 거시다~ 다음에 구독을 배워보쟝

 


 

2020/10/03 - [iOS] - RxSwift: Chapter - 2[Observables]