반응형
LinkedIn 개발자로 성장하면서 남긴 발자취들을 확인하실 수 있습니다.
Github WWDC Student Challenge 및 Cherish, Tiramisul 등 개발한 앱들의 코드를 확인하실 수 있습니다.
개인 앱 : Cherish 내 마음을 들여다보는 시간, 체리시는 디자이너와 PM과 함께 진행 중인 1인 개발 프로젝트입니다.
10년 후, 20년 후 나는 어떤 스토리 텔러가 되어 있을지 궁금하다. 내가 만약에 아직 조금 더 탐구하고 싶은 게 있고, 궁금한 게 있다면, 그게 설사 지금 당장의 내 인생에 도움이 안 되는 것 같더라도 경험해보자. 그 경험들을 온전히 즐기며 내 것으로 만들고, 내 일에 녹여내고... 그러다보면 그 점들이 모여 나란 사람을 그려내는 선이 될 테니까.

Recent Posts
Recent Comments
Total
관리 메뉴

꿈꾸는리버리

Combine 뽀개기 1) Combine 이란 ? 본문

오뚝이 개발자/iOS

Combine 뽀개기 1) Combine 이란 ?

rriver2 2023. 5. 15. 23:00
반응형

 💬 공부하게 된 계기 

가슴속 삼천원이라는 프로젝트를 하고 있는데, 이번에 Version 4 업데이트를 하면서, Combine을 사용해보자는 의견으로 합쳐져서 공부를 시작하게 되었다. 작년에 Rxswift를 겉햝기 느낌으로 했었는데, 이번 기회에 Combine으로 개념을 잘 잡아봐야겠다는 생각이 들어서 아직은 많이 부족하지만, 블로그를 작성해가며 정리를 해보고자 한다..! 

⚠️ 혹시나 잘못된 설명이 있다면 언제든 신고 부탁드려요 !!

 

 🌟 우선 간단하게 알아보는 Combine 

Swift Combine은 Apple이 제공하는 비동기 및 이벤트 기반 프로그래밍을 위한 프레임워크로 크게 데이터 흐름을 표현하는 Publisher와 데이터 흐름을 받아 처리하는 Subscriber로 구성된다.

 🌟 Combine을 꼭 써야 할까? 

Combine이 없어도 Delegate 패턴을 이용하거나 콜백 함수, completion 클로저를 통해서 비동기 프로그래밍을 잘 하고 있었다. 하지만 아주 깊은 콜백 함수가 형성되는 콜백 지옥에 빠지는 상황 등에서 코드가 지저분해지거나 예외처리를 하기 어려운 상황을 맞닥드리게 된다. 그리고 이러한 문제를 해결하기 위해서 Combine을 사용하면 깔끔하게 코드를 처리할 수 있다.

 

Combine의 장점

  1. 비동기 작업 관리: Combine은 비동기 작업을 효과적으로 관리할 수 있는 도구를 제공해서 네트워크 요청, 데이터베이스 조회 또는 사용자 입력과 같은 비동기 작업을 처리할 때 Combine은 Publisher와 Subscriber를 사용하여 비동기 코드를 간결하고 읽기 쉽게 작성할 수 있다.
  2. 이벤트 기반 프로그래밍: 이벤트는 값이나 상태의 변경을 나타내는데, Combine을 사용하면 이벤트에 반응하고 변형하는 작업을 쉽게 수행할 수 있다. 예를 들어, 사용자가 버튼을 탭하는 이벤트가 발생하는 경우 Combine을 사용하여 이벤트를 처리하고 해당 이벤트에 대한 작업을 수행할 수 있다.
  3. 데이터 흐름 조작: Combine은 데이터 흐름을 조작하고 변환하기 위한 다양한 연산자를(Map, Filter, FlatMap, Merge 등)을 제공해서 데이터를 보다 쉽게 변형하고 조작할 수 있다.
  4. 에러 처리: Publisher에서 발생하는 에러를 처리하고, 에러가 발생했을 때 대체 값을 제공하거나 다른 작업을 수행할 수 있다. Combine에서는 에러 처리를 명시적으로 다루기 때문에, 에러에 대한 처리를 놓치는 경우를 방지하고 안정성을 향상시킬 수 있다.
  5. SwiftUI와의 통합: SwiftUI에서 Combine을 사용하여 데이터 상태의 변화를 추적하고 UI를 동기화하는 데 효율적으로 사용할 수 있다.

 

 🌟 WWDC 영상  

▶️ Introducing Combine - WWDC19

▶️ 한글 설명 블로그 ( 저는 영어를 잘 못해서... 영상을 들으면서 다른 사람이 해석한 블로그도 함께 봤습니다 🥲 언젠가 내가 WWDC를 완벽히 소화해서 블로그에 올리는 그날까지.. 영어 기다려 ~~ )

 

2019년에 나온 WWDC의 Introducing Combine 영상을 보면 아래의 세가지 concepts에 대한 이야기가 나온다. (사실 나는 여기 Subscription 까지 해서 4개의 프로토콜이 가장 중요하다고 생각한다. )

Combine의 여러 부분이 protocol로 정의되어 있기 때문에 Protocol의 개념이 약하다면 소들이 님의 Protocol 블로그를 빠르게 훎어보는 것도 좋을 것 같다 !

 

Publisher

Publisher는 데이터를 생성하고 변환하여 Subscriber에게 전달하는 역할을 한다. 이벤트 또는 값을 방출하며, 비동기 작업 결과나 사용자 입력과 같은 외부 이벤트를 처리할 수 있다.

  • Publisher는 하나 혹은 여러 개의 Subscriber 객체에 시간이 흐름에 따라 값을 내보낼 수 있는 타입을 선언하기 위한 프로토콜
  • Output, Failure 타입이 제네릭으로 구현
  • 간단하게 사용가능하게 애플에서는 자주 사용할 것 같은 기능으로 Future, Just, Deferred, Empty, Fail, Record와 같은 Publisher프로토콜을 준수하는 Struct, Class들을 구현해뒀음

Subscriber

Subscriber는 Publisher로부터 받은 이벤트나 값을 처리하고, 원하는 방식으로 조작하거나 구독을 취소하는 역할을 한다. Subscriber는 Combine의 다양한 연산자를 사용하여 데이터 흐름을 변형하고 필터링할 수 있다.

  • Subscriber는 Publisher에게 값을 받을 수 있는 타입을 선언하기 위한 프로토콜
  • Input, Failure 타입이 제네릭으로 구현

Operator

Combine은 많은 유용한 연산자를 제공합니다. Map, Filter, FlatMap, Merge, CombineLatest 등의 연산자를 사용하여 데이터 흐름을 조작하고 변환할 수 있다. 또한, Combine은 에러 처리를 위한 기능도 제공하며, 에러 발생 시 대체 값을 제공하거나 다른 작업을 수행할 수 있다.

  • Operator는 Publisher를 반환하는 Publisher 프로토콜에 정의된 메서드들
  • 여러 종류의 Operator를 Combine 하여 사용하여 Publisher가 내보내는 값을 처리함
  • Upstream, DownStream이라고 하는 Input, Output을 가지고 있음.

Subscription

Subscription은 Combine에서 Publisher와 Subscriber 간의 연결을 나타내는 개념입니다. Subscriber는 Publisher를 구독하여 Publisher로부터 이벤트를 수신하고 처리하는 역할을 한다. 이 구독 과정에서 Subscription이 생성되며, 이를 통해 Subscriber는 구독을 관리하고 구독을 취소할 수 있다.

  • Subscription은 Publisher와 Subscriber의 연결을 나타내는 프로토콜
  • Publisher + Operator + Subscriber로 이뤄진 하나의 작업이 Subscription

 🌟 정리 

이번 블로그에서는 Combine의 대략적인 개요에 대해 알아봤다. 다음 블로그에서 부터는 좀 더 딥한 이야기를 예제를 통해 알아봐 보려고 한다. 아자아자 화이팅 !

 

신기술을 배우기 전에 WWDC 영상을 찾아보는 습관을 만들고 있는데 이번, Combine 영상은 소화해내기가 꽤나 어려웠다. 그래서 여러 자료들을 찾아보면서 정리를 하고 있는데 어렵다.. 어려워.. 영상은 십 몇분 짜리지만 안에 있는 내용을 공부하다보면 몇 시간이 흘러가는 미라클.... 그래도 작년에 Rxswift를 얕게나마 공부해서 작년보다는 조금은 수월하게 시작하고 있음을 느끼기는 한다...

하지만 요즘 자주 들여다 보는 문구를 보며.. keep going ! 

WWDC를 처음 보기 시작했을 무렵에 성두님의 WWDC 세션 비디오, 무엇부터 어떻게 볼까? 라는 글을 본 적이 있는데, WWDC를 입문하는 내게 좋은 지표가 되어주었다. 혹여나 나처럼 WWDC 영상을 조금씩 아삭아삭 먹기 시작한 사람이 있다면 한번쯤 읽어보면 좋을 것 같다 !

반응형
Comments