안녕하세요:) 느슨해진 아리… 정신 체리!입니다.
2022년,
캘리포니아 사과농장 출신 컴바인이라는 친구와 친해져보기로 했습니다.
친해지려면 어떤 친구인지 알아봐야겠죠?
A unified, declarative API for processing values over time
애플의 WWDC 2019 발표에선 다음과 같은 문장으로 combine을 정의했는데요.
정리해서 말하면
이벤트 처리 연산자들을 결합해서 👯비동기 이벤트를 처리하는 선언형 API👯 라고 할 수 있습니다.
비동기 이벤트는 네트워크 연결이라든지, 파일을 불러온다든지
그런 과정에서 나중에 느릿느릿 생기는 데이터를 말하죠?
하지만 비동기 프로그래밍 방식이 새롭게 생긴게 아니라 옛날에도 현재에도 존재하고 있었어요.
Apple에서 제공하는 다양한 비동기 API를 구경해봅시다!!!
Target/Action
NotificationCenter
The delegate pattern
GCD and Operations
Closure Callbacks
Timers
URLSession
KVO
자자 다 들어본, 자주 사용해본 방법들이죠?
그럼 원래 있는 것들 냅두고 컴바인을 쓰면 뭐가 좋을까요?
1. 통합적이다
let pub = NotificationCenter.default
.publisher(for: UITextField.textDidChangeNotification, object: filterField)
컴바인은 위의 API들을 publisher라는 같은 형태의 인터페이스로 사용할 수 있게 디자인되어 있습니다.
2. 선언형이다
또 컴바인은 선언형이다! 라고 하는데요. 그래서 선언형이 뭘까요?
프로그래밍에서 선언형이란
이건 저렇게 해야되고 이렇게 해야되고 주절주절 “어떤” 방법으로 해야하는지를 나타내는 것보다
“무엇”과 같은지를 설명하는 것이라고 하는데요
Arie
.일해라()
.숨쉬어라()
.그리고또일해라()
아리는 어떻게 일하고 어떻게 숨쉬고 또 어떻게 일하는지 주저리주저리 코드를 쓰는 방식이 아니라
아리는 일하고 숨쉬고 또 일하고 있군? 이렇게 수행할 “무엇”을 블럭처럼 쌓아서 표현할 수 있어요
SwiftUI를 보면
Text("Hi, Arie!")
.font(.body)
.fontWeight(.bold)
.padding()
이런식으로 Text의 모양새가 블럭처럼 챱챱챱 쌓여있죠?
그렇다면 컴바인도 이런식으로 쓰는거라고 기대할 수 있겠죠?!
슬쩍 구경해볼까요?
let sub = NotificationCenter.default
.publisher(for: UITextField.textDidChangeNotification, object: filterField)
.map( { ($0.object as! UITextField).text } )
.filter( { $0.unicodeScalars.allSatisfy({CharacterSet.alphanumerics.contains($0)}) } )
.debounce(for: .milliseconds(500), scheduler: RunLoop.main)
.receive(on: RunLoop.main)
.assign(to:\\MyViewModel.filterString, on: myViewModel)
이렇게 NotificationCenter가 내보내는 이벤트를 여러 연산자들을 레고처럼 결합(combine)해서 처리를 해줄 수 있습니다.
그래서 이름이 컴바인이 됐나봐요!
그 밖에도
비동기적인 데이터, 이벤트를 처리할 수 있다.
이런 이벤트 처리 코드를 중앙 집중화할 수 있다!
그리고 선언형이기 때문에 깔끔하게 사용할 수 있다.
Generic하고 Type safe하게 사용할 수 있다!
> 이건 Publisher와 Subscriber가 서로 주고 받는 값이 같아야 하기 때문인데요! 나중에 차차 설명하겠습니다.
그리고 애플에서 만들었다.(이 이유가 베스트이죠?ㅎ RxSwift… 즐거웠다…. 안녕)
컴바인을 알기 위해서는 다섯가지의 프로토콜을 공부해야해요
- Publisher
- Subscriber
- Subject
- Scheduler
- Cancellable
그 뜻은 공부해야 할 주제가 5개란 뜻이죠 ㅎ
앞으로 요 5개의 프로토콜을 차차 공부해 보도록 하겠습니다.
To be continue…✨
'Combine' 카테고리의 다른 글
Combine | Scheduler (0) | 2022.06.10 |
---|---|
Combine | Operator (0) | 2022.06.02 |
Combine | Publisher and Subscriber (0) | 2022.05.24 |