대체로 Combine 프레임워크에서 세가지의 핵심 요소가 존재한다. 이들은 Publisher
Operator
Subscribers
이다. 당연하게도 더 많은 요소들을 가지고 있지만, 세 가지가 없을 경우에는 우리가 원하는 바를 이룰 수 없다.
Publisher
Publisher는 한개 또는 그 이상의 관심을 가지고 있는 대상에게 값들을 방출할 수 있는 타입이다. 연산, 네트워킹 또는 사용자의 이벤트 처리를 포함하여 모든 것이 될 수 있는 Publisher의 내부 논리에 관계 없이 다음 세가지 유형의 이벤트를 보낼 수 있다.
- Publisher의 제네릭 타입인 Output 타입의 값
- 성공에 대한 Completion
- Publisher의 Failure 타입과 동일한 에러를 방출하는 Completion
Publisher는 값을 보내지 않을 수도 있으며, 1개 이상의 값을 내보낼 수 있다. 이는 성공적이든 실패에 의한 것이든 완료된 경우 다른 이벤트를 내보낼 수 있다.
다음 그림의 파란색 박스들은 타임라인에 따라서 방출되는 값들을 이야기한다. 우측에 있는 수직선은 데이터 흐름의 종료를 이야기한다.
세가지의 가능한 이벤트의 연결은 매우 보편적이여서 프로그램에서 모든 종류의 동적 데이터를 나타낼 수 있다. 따라서 연산, 네트워크 호출, 사용자 이벤트에 대한 반응 또는 화면에 데이터 표시에 관계 없이 Combine Publisher를 사용하여 앱의 모든 작업을 처리할 수 있습니다.
Publishers의 가장 좋은 기능 중 하나는 내부적으로 에러 처리를 포함하고 있다는 것이다. 우리가 에러를 처리하기 위해서 추가적으로 해줄 것들이 없다는 것이다.
Publisher 프로토콜은 두가지의 제네릭 타입을 가지고 있다.
Publisher.Output
은 Publisher의 반환 값들이다.Publisher.Failure
는 실패했을 경우에 Publisher가 던질 수 있는 타입이다.
주어진 Publisher를 구독할 개, 어떤 값을 기대할 수 있고, 어떤 오류로 실패할 수 잇는 지 알 수 있게 됩니다.
Operators
Operators는 동일한 Pubilsher또는 새로운 Publisher를 반환한다. 이는 Publisher 프로토콜에 선언된 메서드이다. 이는 여러 연산자를 차례로 호출하여 효과적으로 함께 연결할 수 있기 때문에 매우 유용하다.
Operators라고 불리는 이런 메서드들은 매우 분리되어 있고, 구성 가능하기 때문에 단일 구독 실행에 대해 매우 복잡한 논리를 구현하기 때문에 결합할 수 있다. 이들을 통해서 단단하게 구성되어 있는 퍼즐을 맞추는 것 같다. 이들은 하나의 출력이 다음 입력 유형과 일치하지 않는 경우에 대한 실수로 잘못된 순서로 놓거나 함께 맞출 수 없게 되기 때문이다.
명확하게 결정론적 방식으로 올바른 입력과 출력 유형 및 기본 제공 오류 처리와 함께 각 비동기 추상화 작업의 순서를 정의할 수 있게 됩니다. 추가적으로 Operator는 항상 업스트림과 아웃 스트림이라고 불리는 입력과 출력을 가지고 있게 된다. 이는 상태를 공유하는 것을 막을 수 있다.
Operator는 이전의 연산자로 부터 받은 데이터로 작업하는 데 중점을 두고 체인의 다음 연산자에 출력을 제공합니다.
Subscriber
마지막으로, 우리는 Subscription의 체인의 끝에 도달하게 된다. 이들은 일반적으로 Output이나 completion Event들에서 무엇인가를 하게 된다.
현재의 Combine은 두가지의 내장된 Subscriber를 가지고 잇다.
Sink
는 출력 값이나 Completion에 대해서 처리할 수 있는 클로저를 제공하고 있다.Assign
은 어떤 Custom한 코드를 작성하지 않고, 출력값을 프로퍼티에 저장하는 것을 제공한다.
'IOS > Swift' 카테고리의 다른 글
Swift Concurrency (2) - Behind Scene (2) | 2023.10.13 |
---|---|
Swift Concurrency 맛보기 & 맛 평가 (2) | 2023.10.04 |
Combine (2) (0) | 2023.09.07 |