swift combine 시작하기

슆공부·2022년 6월 30일
0

RxSwift란?

오픈소소스로, 애플 내에서 제작하진 않았지만 개발자들이 배움의 공유를 위해 비동기처리를 위한 고민 끝에 나온 패러다임이다.

Combine이란?

wwdc2019에서 처음 소개된 프레임워크이다. 애플에서 RxSwift를 차용해서 만든 것이다.
ios 13이상이닷,, minimum 13이상 지원하는 회사에 가면 좋을 것,,레거시 코드가 거대한 조직에서는 새로 시도하는 것이 위험할 수도 있기 때문에 성장하는 것에 도움 안될 수 있다,,!

비동기, 동기

동기 - 요청과 결과가 동시에 오는 것, 1:1 대화
비동기 - 요청과 결과가 동시가 아님, 이메일 대화

  • 모바일 개발에서 비동기 작업 엄청 많음, 서버에서 데이터 받아와서 보여줄 때나 사용자의 버튼 인터렉션(언제 받아오고, 언제 터치할 지 모르기 때문!)

왜 Combine이 소개되었나?

  • 기존의 비동기 처리 방식들을 조합해서 개발하다보니 코드가 복잡해졌다.
    예, Target/action , notification center, urlSession, KVO, ad-hoc callbacks...
    => 통합된 비동기 처리방식이 필요해서 일관된 방식으로 비동기적인 처리할 수 있는 API를 combine으로 제공하였다.
    unified, declarative API for processing values over time 이라고 공식문서에 나와있다..ㅎㅎ

장점:
이벤트 처리 코드를 중앙 집중화(centralizing)하고
중첩된 closures 및 콜백과 같은 까다로운 기술을 제거하여
코드를 읽고 유지보수하기 쉽게 만든다.

Combine 알아보기

  • 3가지 주요 컴포넌트
    - Publisher: 생산자, 배출자, 크리에이터, 배설자, 싸지르는 사람..데이터 방출하는 사람
    - Subscriber: 소비자, 구독자, 받는 사람
    - Operator: 변경시키는 사람, 마법사, 가공하는 사람, 생산자가 배출한 것 가공해주는 사람, 화질 변경자(유투브)
    이벤트 흐름 event stream (event pipeline) : publisher -> operator -> subscriber

Publisher

protocol이다.
<배출하는 타입, 실패타입>을 정의해야하며 구독자가 요청하는 만큼의 데이터를 제공한다.
빌트인 타입으로 Just, Future가 있는데 just는 값을 다루고 future는 function을 다룬다.

Subscriber

이것도 프로토콜이며, input과 실패 타입을 정해줘야한다. 퍼블리셔에게 데이터를 요청한다.
퍼블리셔 구독 후에 갯수를 요청한다. 빌트인 subscriber로 assign, sink가 있다.
assign은 퍼블리셔가 제공한 데이터를 특정 객체의 키패스에 할당하는 것이고
sink는 퍼블리셔가 제공한 데이터를 받을 수 있는 클로저를 제공하는 것이다.

서로의 관계

Subscription

subscriber가 퍼블리셔와 연결됨을 나타내는 애.
퍼블리셔가 발행한 구독 티겟 같은 것이다. 구독 티켓 있으면 데이터를 받을 수 있고 사라지면 구독 관계도 사라진다.
cancellabel protocol도 따르고 있어서 subscription 통해 연결을 캔슬할 수도 있다.

Operator

publisher에게 받은 값을 가공해서 subscriber에게 제공한다.
input output 실패타입 타입이 다를 수 있다.

Scheduler

스케쥴러가 스레드 자체는 아니고 언제 어떻게 클로저를 실행할 지 정해주는 애로
작업에 따라서 백그라운드나 메인스레드에서 작업이 실행될 수 있게 도와주는 역할을 한다.

  • 메서드
    - subscriber(on:) : 퍼블리셔가 어느 스레드에서 수행할 지 결정해준다.
    무거운 작업은 메인스레드 외 다른 스레드에서 작업하게 해준다. 백그라운드 계산 많이 필요한 것이나 파일 다운로드 할 때...
    • receive(on:): operator, subscriber가 어느 스레드에서 수행할 지 결정해준다.
      UI 업데이트가 필요한 데이터를 메인 스레드에서 받을 수 있게 해준다. 서버에서 가져온 데이터를 UI업데이트할 때...

Subject(publisher)

send 메서드 사용해서 이벤트 값 주입시킬 수 있는 퍼블리셔

  • 빌트인 타입
    - passthroughSubject - subscriber가 요청하면 그때부터 받은 값 전달만하고 안들고있음
    • currentValueSubject - subscriber가 요청하면 최근 값 전달하고 그때부터 받은 값 전달해줌. 전달한 값 들고 있음

참고

0개의 댓글