티스토리 뷰
일단 원본 영상부터, Introducing Combine
본 글은 해당 영상을 본 후 간단히 요약한 글로 블로그 주인장의 영어 실력이 좋은 편은 아니라 잘못 번역된 부분이 있을 수 있음
Why?
UI 처리부터 시작해서, Ad-hoc, URLSession 등 정말 많은 비동기 처리를 하고 있다.
사용 사례들이 정말 많고 관리하는 방식이 각기 다름, 이는 사용성 및 생산성 저하로 이어지는 만큼 이를 해결하고자 하였다.
Apple Foundation 팀에서는 비동기 처리 후 나오는 값들을 시간이 지남에 따라 변하는 값으로 정의하였고,
이를 처리하기 위한 통합 선언형 API, Combine을 만들었음
Combine
Pub-Sub 형태의 비동기 처리 API로 Publisher와 Subscriber, Operator를 이용함
WWDC에서 언급한 Combine의 특징을 요약하자면, 다음과 같음
- Generic → 일반적인 알고리즘을 작성, 아무데나 가져다 붙여 쓸 수 있음
- Type Safe → 컴파일 시간에 오류를 잡을 수 있음
- Composition → 간단하고 이해하기 쉬운 코드를 쓸 수 있으므로 조합해서 사용하기 좋음
- Request Driven → 요청하지 않으면 실행되지 않음. 즉, 메모리 관리에 유리함
특징에서도 볼 수 있듯, 사용성 높은 코드와 개발 편의성을 강조하고 있는 것을 알 수 있다. 실제로도 높은 가독성과 유지보수성을 언급한다. Combine은 다음과 같은 로직을 따르는데,
- Publisher를 Subscriber가 구독함
- Publisher가 subscription이라고 하는 구독 이후의 행동을 Subscriber에게 제공해 줌
- Subscriber는 이를 이용해 값을 요청함
- Publisher는 요청한 값을 반환해 줌, 이 요청은 반복될 수 있음
- Publisher가 처리 종료를 반환함으로서 기본적인 로직이 종료됨
Publisher, Subscriber, Operator
Publisher, 시간이 지남에 따라 변하는 값을 제공해주는 프로토콜
정상 처리된 이후 반환될 값을 의미하는 Output과 에러에 대한 처리를 하는 Failure가 기본적으로 정의되어 있음
cf. error가 발생하지 않는 경우에는 채택시에 Never를 이용, 명시적으로 에러 처리를 하지 않음을 지정 할 수 있음
Subscriber, 값을 받아오고 이를 기반으로 다음 행동을 함
Publisher로 부터 받아오는 값을 의미하는 Input과 에러의 Failure 앞선 로직 설명에서 언급되었던 세 종류의 receive가 있다.
receive(subscription: ), 정의된 구독 이후의 행동을 제공받음
receive(_ input: ), 앞서 Input에 정의된 값을 받음
receive(completion: ), 완료 혹은 에러에 대한 처리 여부를 제공 받음
Publisher와 마찬가지로 Failure에 Never를 이용해 에러 처리가 없음을 명시할 수 있다.
기본적으로는 Publisher의 Output과 Subscriber의 Input이 동일해야 하지만, 그렇지 않은 케이스가 정말 많고
이때 사용하도록 Operator들을 제공한다.
Operator, 연산자와 고차함수
Publishers 내에 선언되어 있으며, Upstream이라고 하는 Publisher로 부터 받은 값을 원하는 형태의 고차함수를 이용 Subscriber가 요구하는 값과 맞는 Publisher로 변환해주는 역할이라고 생각하면 된다.
여러 Publisher들을 모아 Subscriber에게 제공하는 Zip과 CombineLatest도 있다.
위 두 개는 유사하지만, 아래의 경우는 가장 마지막 값을 계속 반환해주는 역할이라고 한다.
예시로 스위치와 인디케이터를 들었는데, zip에서는 Publisher들의 값을 꾸준히 받아서 묶은 후 반환해주는 역할
CombineLatest는 Publisher들의 값을 받는대로 계속 업데이트 해주는 역할 정도로 이해했다. 공식문서도 읽고와야지
cf. Synchronous에서의 한 개의 값은 각각의 Type들이고 여러개의 값은 Array라고 할 때, Asynchronous에서는 한 개의 값을 Future, 여러 개의 값을 Publisher로 지칭한다고 한다.
일단 기본적인 Combine 정리는 이정도로 마무리하고 내일은 Combine in Practice를 볼 예정이다.
'iOS > WWDC' 카테고리의 다른 글
WWDC 2021, Async/Await - Meet async/await in Swift (0) | 2023.05.10 |
---|---|
WWDC 15, POP - Protocol-Oriented Programming in Swift (0) | 2023.04.25 |
- Total
- Today
- Yesterday
- await
- 주저리주저리
- Swift
- 리팩토링
- writing helpful error message
- Equatable
- 코드리뷰
- 개발자
- flutter
- getx
- message
- struct
- viewcontroller
- lifecycle
- techincal
- guri's dev
- Provider
- 테크니컬라이팅
- combine
- 개발문화
- IOS
- UIKit
- WWDC
- OOP
- github
- document
- protocol
- 기술블로그
- POP
- Async
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |