티스토리 뷰

Combine

Start! Combine

밀쿄 2019. 12. 12. 14:11

와 백만년만에 포스팅이네요.

정말로 정신없이 지내고 있습니다..

개인앱 리팩한다고 정신이 없습니다..

내가 짜는게 코드인지 스파게티인지...(아마 스파게티에 더 가까울껍니다..)

오늘은 Combine을 들고왔습니다..

iOS13부터 사용가능하지만 앞으로 개인적으로 많이 사용될 것 같습니다

특히 Notification 이나 KVO의 사용빈도가 확 줄어드네요..

특히 콜백 지옥에서 벗어날 수 있다고 생각합니다..

비동기 이벤트 처리하기도 쉽구요

조금 극단적인 비유를 하자면..

저렇게 코드가 계속 가면...

코드의 가독성이 좋을까요?

에러처리는 또 어떨까요.. 글쎼요

저는 좀 별로라고 봅니다

만약에 세번째 오퍼레이션에서

d가 0이면 에러가 나니까 유저에게 에러 메세지를 던지고 싶다면?

이렇게 되면 전 개인적으로 조금 복잡해진다고 봅니다..

컴플리케이션에 Result타입을 넣어서....해결해야겠지요.

추후 배우겠지만 콤바인으로 바꾸면 어떻게 될까요?

이렇게 처리할 수 있습니다. 

물론 이런 상황이 없...겠죠? 아마?

극단적으로 든 비유이니까..

지금은 아마 저 코드가 이해가 안가실 껍니다

오늘부터 저랑 이 콤바인을 살펴보러 갑시다.

 

https://developer.apple.com/documentation/combine

 

Combine | Apple Developer Documentation

A publisher that allows for recording a series of inputs and a completion, for later playback to each subscriber.

developer.apple.com

여기가 애플 문서입니다.

같이 한 번 살펴봅시다

 

콤바인에 대해 이렇게 적혀 있네요

"이벤트 처리 연산자를 결합하여 비동기 이벤트 처리를 커스텀마이징"

밑에 OverView를 봅시다

1. 시간이 지남에 따라 값을 처기하기 위한 선언적 Swift API

2. Publisher가 값을 방출하면 Subscriber가 해당 값을 받도록 한다.

3. Publiser Protocl은 시간이 지남에 따라 값을 전달 할 수 있다.(?)

4. Publisher는 Subscriber가 값을 요청한 경우에만 값을 내보낸다.

5. 그렇게 함으로써 이벤트를 받는 속도를 조절 할 수 있다.

6. 이벤트 처리 코드를 중앙 집중화 할 수 있다.

7. 코드의 가독성 증가

 

사실 내용이 더 있긴하지만 저정도로 요약해봤습니다.

저거만 봐선 감이 안오지만

Publisher란 놈이 값을 발행하면

Subscriber가 값을 받는건 알겠네여

그리고 Publisher가 프로코톨인거 까지 알겠네요

 

그럼 Publisher를 조금 더 알아봅시다.

https://developer.apple.com/documentation/combine/publisher

 

Publisher - Combine | Apple Developer Documentation

Available when Failure is Output.Failure and Output conforms to Publisher.

developer.apple.com

애플문서는 여기 입니다.

아까 읽은 것 처럼 protocol인게 바로 보이네요

위에 요약정리? 부분에는

"시간이 지남에 따라 시퀀스를 전달 할 수 있다."

이렇게 적혀있네요

 

참고로 이 녀석에

Type Erasure를 한 AnyPubliser라는 것도 있고

열거형으로 되어있는

( 정확힌 열거형이 중첩된 구조체>)

Publihsers라는 것도 있습니다.

 

나머지 부분은 직접 구현하실 때

참고하시면 될 것 같습니다.

 

바로 SubScriber에 대해 알아보겠습다.

https://developer.apple.com/documentation/combine/subscriber

 

Subscriber - Combine | Apple Developer Documentation

Available when Input is Void.

developer.apple.com

애플 문서는 여기 입니다.

이 녀석도 아까처럼 protocol 이네요.

위에 요약된 부분을 읽어보면

"Publisher로 부터 값을 받을 수 있습니다"

이렇게 적혀있네요.

 

더불어서 OverView 마지막에

Publisher에서 다음 두 가지 Subscriber를 오퍼레이터로 제공한다고 되어있네요

-> sink(receiveCompletion:receiveValue:) 

-> assign(to:on)

 

이 정도까지만 알고 코드를 봅시다.

 

제일 간단한 오퍼레이터를 봅시다.

아까 위에서 콤바인은 기본적으로는

Publihser가 값을 방출하면 Subscriber가 값을 받는다고 했죠?

네 그래서 Subscriber에게 값을 던져주었습니다

 

자 그럼 저 Just는 뭘까요

이 놈은 Subscriber에게 오직 한 번만 출력을 내보내고

끝이 나는 Publisher 입니다

+ 기본적으로 생성할 때 인자값을 하나 받죠?

-> 그렇다는건 인자가 뭘 들어올지 모른다는 거고?

-> 그렇다는 건 인자로 무슨 타입이 들어올지 모른다는거니까?

-> 제네릭 입니다.

네 이 녀석은 제네릭 구조체입니다.

 

그런데 매번 이렇게 subscriber를 구현하기 귀찮습니다.

그래서 아까 두 가지 오퍼레이터를 제공한다고 했었죠?

심플하게 쓸 수 있습니다.

 

자 이렇게 간단하게 시작해보았습니다.

어려웠을지 모르겠네요.

 

다음 시간엔 저 AnyCancellable에 대해서 다뤄보겠습니다.

그럼 끝.

 

 

참고 자료

https://presto95.gitbook.io/combine-rxswift-reactiveswift/

불러오는 중입니다...

 

'Combine' 카테고리의 다른 글

CombineLatest  (0) 2020.02.11
[Combine] Sequence  (0) 2019.12.20
[Combine]Just  (0) 2019.12.16
[Combine] Scheduler  (0) 2019.12.15
[Combine] Cancellable  (0) 2019.12.13
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함