Skip to main content

Command Palette

Search for a command to run...

[WWDC19] Combine - (1)

Async Programming을 위한 Combine

Updated
[WWDC19] Combine - (1)
T

안녕하세요🙇🏻‍♂️ 세상을 더 편리하게 바꾸고 싶은 iOS 개발자 최인호입니다.

Hello 👋 I'm Inho Choi, an iOS developer who wants to change the world more conveniently.

  • 대학교 졸업
  • Apple Developer Academy @ POSTECH 1기
  • KWDC Main Organizer
  • AsyncSwift Organizer

다들 콤바인을 끌어봤는가?

전원일기 OST가 나올법한 콤바인....

하지만 우리가 알아볼건 iOS Combine 깔깔깔


Combine 따따디씨 2019에서 처음 소개된 개념이다.

나 같은 초보자의 설명보다는 애플의 발표가 100번 나으니 애플 발표를 먼저보고

이건 참고용으로만~!

Introducing Combine

Introducing Combine

컴바인에는 크게 3가지가 있다.

  • Publisher

    • Value와 Error를 만드는 역할
  • Operator

    • 이건 밑에 설명! 개봉박두!
  • Subscriber

    • 수신된 Value와 Error를 처리하는 역할

이 3개를 천천히 알아가보자.

Publisher

  • Value 와 Error 를 만드는 역할이다.

  • Value Type(Struct)로 구성되어 있다.

Struct로 구성되는 Value 타입이니 protocol으로 구성되어 있다.

associatedtype으로 OutputFailure로 구성되어 있다.

subscribe()를 통해서 Subscriber를 Publisher에 붙이는 역할하는 메소드가 있다.

예시로 살펴보자

NotificationCenter에서 Publisher를 보자

Output으로 Notification을 출력하고, Failure로 Never를 출력한다.

Subscriber

  • Value, Failure, Completion을 받는다.

  • Reference Type 이다.

receive가 총 3가지가 있다.

  1. receive(subscription: Subscription)

사실 이게 가장 이해 안 갔다. 뭐지 이 메소드는?

아하! subscriber에게 Publisher에게 잘 붙었다고 알려주는 함수구나!

*여기서 subscriber & subscription 명칭을 헷갈리지 말자.

  1. receive(_ input: Input)

Publisher로 부터 만들어진 값을 subscriber가 값을 받는 함수

  1. receive(completion:)

publisher가 subscriber에게 값 전달이 끝났다고 알려주는 함수이다.

정상 종료, 비정상종료 상관 없이!

Subscriber의 예시를 보자. Failure로 Publisher와 같이 Never를 채택할 수 있다.


흠 여기까지 보면 아직 감에 안잡힌다. 그래서 어떻게 작동되는지 보자!

Publisher와 Subscriber 작동 원리

  1. Publisher의 subscribe(_:)메소드를 이용해서 Subscriber를 연결할 수 있다.

  2. 만약 성공적으로 연결된다면 Subscriber의 receive(subscription:)이 작동한다.

  3. Subscription을 통해서 value를 요구하거나 cancel 할 수 있다.

  4. Publisher에 value를 요구하면 Publisher는 Subscriber의 receive(_:)호출을 통해 값을 전달한다.

  5. 만약 출력이 끝나면 Publisher는 Subscriber의 receive(completion:)을 호출한다.

애플 WWDC에서는 위 그림 같이 설명하고 있다.

오해할만한게 화살표 시작 부분은 호출한 Object 기준이다.


자 그럼 예시로 가보자.

엥? 정상적으로 Publisher도 만들어졌고 Subscriber도 만들어졌는데 왜 안될까?

정답은 Publisher의 Output != Subscriber의 Input이기 때문이다.

아 그럼 저걸 일일이 맞춰주는거 힘들겠는데? 에서 나온 개념이 바론 Operator이다.

Operator

  • Publisher를 채택하고 있다.

  • Publisher -> Subscriber 에게 보내는 것을 Downstream

  • Subscriber -> Publisher 로 가는 것을 Upstream

  • Value Type

Publisher: NotificationCenter에서 publisher를 통해 Notification을 출력한다.

Operator: 그걸 map 메소드를 통해서 map -> Int 로 변환해준다.

Subscriber: assign 을 통해서 merlin 의 grade 에 저장한다.

여기서 map 메소드 이거 바로 Operator 이다.

Operator에는 어떤게 있을까?

우리가 생각하기에 Array 처럼 다룬다고 생각하면 좋다.

Array에 map 이 있듯이 Operator로 map이 있다.

compactMap, filter 도 있다.


이렇게 설명해도 이해갈 듯 안 갈듯 한 게 당연!

그래서 이어서 2편 제작하겠다!


참고한 사이트

애플 공식 개발 사이트

WWDC 2019 Introducing Combine

More from this blog

[CS] Https는 대칭키일까? 비대칭키일까?

결론: 둘 다 쓴다. 하지만 쓰는 타이밍은 다르다. 자세하기 알아보자. 혹시 모르니 용어는 정리해두자. 암호화 <-> 복호화 해독 = 복호화 비대칭키 해독은 대칭키 해독보다 오래 걸린다. 비대칭키를 쓰는 과정 💡 비대칭키는 대칭키를 만들기 위한 여정에 쓰인다. 뭔 소리지??? 대칭키를 만들기 위해서 비대칭키가 쓰인다고?? 비대칭키 해독은 대칭키 해독보다 오래걸린다. 1. Client가 Server에 접속을 요청하면 서버는 Secret ...

Jun 6, 202417

Xcode Cloud 사용 후기

애플에게 내는 친구비를 내며 Apple Developer 계정을 유지하려면 매년 애플에게 13만원의 친구비를 지불해야한다. 그리고 몇 개 친구 답례 상품을 주는데 그 중 하나가 Xcode Cloud 상품 주는데 안 쓸 이유는 없지 Xcode Cloud 개인에게는 과연? K-Spam 이라는 앱을 오랫동안 구상하고 드디어 출시를 했다. 생각보다 삽질을 많이 한 것 같다. 하지만 사이드 프로젝트의 진정한 의미는 삽질(?)하며 배우는 것이 아니겠나 개...

Jun 3, 202418

iOS Version 주의

앱 버전에는 상위버전이 출시한 상태에서 하위 버전을 아카이브 할 수 없음 예를 들어 출시한 버전이 1.3 이면 1.2로는 아카이브가 불가능함 단, 출시한 적이 없는 앱이라면 버전은 마음대로 지정 가능 App Store Connect의 버전 예를 들어 1.03 이랑 1.1 이랑 비교하면 앱 버전은 1.03 > 1.1 로 인식한다. . 단위로 잘라서 Int로 인식하는 것 같다. 그러니 0은 최대한 사용하지 않고 구분한다면 . 으로 구분해야겠다.

Jun 1, 20248

Toby의 iOS 블로그

34 posts

안녕하세요 세상을 더 편리하게 바꾸고 싶은 iOS 개발자입니다.