2023. 1. 11. 13:09ㆍiOS
Rx의 시작인 Observable부터 알아보도록 하겠습니다.
Observable 이란?
Rx의 심장 같은 존재
Observable = Observable Sequence = Sequence
비동기적(asynchronous) 이며 Observable 들은 일정기간 동안 계속해서 이벤트를 생성(emit)
marble diagram: 시간의 흐름에 따라서 값을 표시하는 방식
Observable(옵저버블)의 생명주기
1.Create가 시작되고
2.subscribe를 적용하여
3.onNext 로 데이터가 전달된다. onNext로 전달될 수도 있고 에러가 날수도 있다. 에러가 나면 에러에서 끝난다.
4. onCompleted 되고 끝이 난다.
5. Disposed 한다. (끝부분)
- Just -
제일 먼저 just 에 대해 알아보도록 하겠습니다.
Observable<Int>.just(1) // Observable은 타입추론을 통해서 옵저버블 시퀀스를 생성합니다.
// 그리곤 just를 실행하는데 말 그대로 just는 하나의 엘리멘탈을 방출하는 것입니다.
// 하나의 요소를 포함한 것을 방출한다라고 생각하시면 될꺼같습니다.
Observable<Int>.just(1) // 우선 이런 식으로 타입 추론을 진행한 뒤에 just 요소를 1로 하겠습니다.
이렇게만 진행되었을 경우 정의만 되어 있습니다. 아직 방출을 하지않았습니다.
정의만 되어있기에 just(1)를 방출하기 위해서 subscribe 가 필요합니다.
.subscribe(onNext: {print($0)}) 이런식으로 이벤트를 방출 할 수 있는 subscribe를넣어 줍니다.
이제 최종적으로 확인을 진행 해보겠습니다.
자 이렇게 사진 처럼 just의 1이란값을 넣어 Observable 로 정의를 진행 한 다음
subscribe로 이벤트를 방출 하여 값을 출력해 내고 있습니다.
- Of -
이제 just 기본의 다음인 of 에 대해서 알아보도록 하겠습니다.
of는다양한 형태의 이벤트가 가능 합니다. 하나 이상의 이벤트를 방출 할 수도 있습니다.!!
print("------Of1-------")
Observable<Int>.of(1, 2, 3, 4, 5) // 먼저 정의를 내고 값을 입력합니다.
.subscribe(onNext: { // subscribe로 이벤트를 방출 합니다.
print($0)
})
print("------Of2-------")
Observable.of([1, 2, 3, 4, 5]) // 여기 of2에서는 타입추론을 하지않고 배열을 입력 해보도록 하겠습니다.
.subscribe(onNext: { // subscribe로 이벤트를 방출 합니다.
print($0)
})
결과는 이렇게 진행 됩니다.
just와는 달리 of 는 여러개의 이벤트를 진행 할 수 있습니다.
먼저 첫번째인 of(1,2,3,4,5) 를 한꺼번에가 아닌 각각으로 이벤트를 방출 시킨 것을 볼 수 있습니다.
두 번째에서의 of([1,2,3,4,5])는 배열을 한번에 이벤트로 방출하는 모습을 볼 수 있습니다. 어? 그렇다면 just로 배열을 입력하게 되면 똑같지않을까요?? 아마 실행을 해보신다면 of 에서의 하나의 배열을 출력할때에는 just로 써도 똑같이 이벤트를 방출 한다는 것을 알 수 있을껍니다.!
이렇게 진행 됨을 알 수 있습니다.!
배열에 관하여 하나 더 알아 볼것이 있는데 그것은 바로 from 입니다.
배열을 받는데 그 배열을 하나씩 방출하게 됩니다.
- From -
조금 전 얘기했던거 처럼 from 에 대해서 알아 보도록 하겠습니다.
from은 배열을 받습니다. 하지만 그 받은 배열을 just나 of 처럼 한번에 호출하는것이 아닌 각각의 인덱스만큼 호출 한다는 점입니다.
사진처럼이렇게 배열의 인덱스를 하나하나 호출하는 점을 볼 수 있습니다.
배열의 값 하나를 부검? 할때에는 from을 쓰면 좋을 꺼같습니다.👍
이제 onNext에 대해서 알아 볼려고합니다. 꼭 저렇게 subscribe 이후에 onNext를 호출하는데에는 이유가 있을꺼라고 생각됩니다.
-OnNext -
onNext가 없다면 어떻게 될지 알아 보도록 하겠습니다.
첫번째 subscribe1를 보시면 이벤트를 방출할경우 next(1),(2),(3)이런식으로 뜨게 됩니다.
먼가 옵셔널의 느낌이 납니다..
그래서 두번째 subscribe2에서 element를 if let를 통해서 바인딩 할 경우 에 출력값을 보면 기존 onNext를 써서 이벤트를 방출한것과 같이 나옵니다.!
어떻게 보면코드의 가독성이 떨어지는 경우인거 같습니다....
결국 세번째인 subscribe3 에서는 onNext를 사용하여 이벤트를 정의 하고 방출 할 경우 아주 쉽고 간단한? 느낌으로 출력값이 나타나게 되었습니다.
이 정도로Rx의 기본적인 부분을 알아 봤습니다.
아직까지는 어떻게 쓰이는정도인지를 알아가는 과정이라 그런지 이해가 조금씩 되어 가고 있긴하지만.. 막상 앱제작 과정에서 쓸때는 어떻게 알아가면서 쓸수 있을지 의문을 가지게 되긴합니다. 계속해서 부딪혀 보면서 Rx를 알아 가보도록하겠습니다.!!!
'iOS' 카테고리의 다른 글
싱글톤 Singleton (0) | 2023.08.22 |
---|---|
MVVM 패턴에 대해서 알아보기 (0) | 2023.01.16 |
외부 라이브러리 (Cocoa Pods 추가하기) (0) | 2023.01.10 |
didSelectRowAt 메소드 사용시 주의사항 (delegate) (0) | 2023.01.03 |
UIRefreshControl에 대해 알아보기(로딩 인디케이터) (0) | 2023.01.02 |