Combine의 핵심 기본요소는 Publishers, Operators, Subscribers.
다른 요소들도 있지만 위 세가지는 필수입니다.
Publishers
하나 이상의 Subscriber에게 시간이 지남에 따라 값을 내보낼 수 있는 타입입니다.
수학 연산, 네트워킹, User event 처리를 포함한 거의 대부분의 Publisher의 내부 로직과 관계없이 3가지 타입의 이벤트를 내보낼 수 있습니다.
- Publisher의 Generic타입의 Output
- Success 완료
- Publisher의 Failure타입의 error가 있는 완료
Publisher는 0개 이상의 Output값을 내보낼 수 있고, 성공 혹은 실패로 완료된 경우 다른 이벤트를 내보낼 수 없습니다.
아래는 시간이 지남에 따라 Int값을 내보내는(emit) Publisher를 타임라인에서 시각화한 그림 → 마블 다이어그램

- 파란 박스: 타임라인에서 지정된 시간에 방출된 값을 나타내고 숫자는 방출된 값을 나타냅니다.
- 다이어그램의 오른쪽에 수직선: 성공적인 Stream완료를 의미합니다.
마블 다이어그램은 소프트웨어 내의 모든 종류의 동적 데이터를 나타낼 수 있습니다. 그래서 숫자 계산, 네트워크 호출, 사용자 제스처 반응 또는 화면상의 데이터 표시에 관계없이 Combine Publisher를 사용하여 앱 내의 모든 작업을 처리할 수 있습니다.
Publisher Protocol은 두가지 유형이 일반적입니다.
- Publisher.Output은 Publisher의 출력 값의 타입입니다. Int publisher라면 String이나 Date값을 내보낼 수 없습니다.
- Publisher.Failure는 Publisher가 실패할 경우 발생할 수 있는 Error 타입입니다. Publisher가 절대 실패할 수 없는 경우 Never failure타입을 지정해줍니다.
특정 Publisher를 Subscribe하면 예상되는 값과 실패할 수 있는 Error를 알 수 있습니다.
Operators
Operators는 동일한 Publisher 혹은 새 Publisher를 반환하는 Publisher protocol에서 선언된 메서드입니다.
Operators는 Subscription 중 복잡한 처리를 구현하기 위해 결합(combine)시켜서 사용할 수 있습니다.

Operators는 항상 업스트림(Upstream)과 다운스트림(Downstream)이라고 하는 입력과 출력을 항상 가지고 있습니다.
→ 이를 통해 ‘공유상태’를 피할 수 있습니다.
Operators는 이전 Operator로부터 받은 데이터로 작업하는 데 중점을 두고 체인의 다음 Operator에게 출력을 제공합니다.
즉 비동기적으로 실행되는 다른 어떤 코드도 작업중인 데이터에 끼어들어 변경할 수 없습니다.
Subscribers
모든 Subscription은 Subscriber와 함께 끝납니다.
Subscriber는 보통 내보낸 출력 혹은 completion 이벤트로 ‘무언가’를 수행합니다.

Combine은 데이터 스트림 작업을 간단하게 만드는 두개의 기본 제공 Subscriber를 제공합니다.
- sink subscriber를 사용하면 Output 값 및 completion을 수신할 코드와 함께 closure를 제공할 수 있습니다. 거기서 받은 이벤트로 원하는대로 할 수 있습니다.
- assign subscriber를 사용하면 custom 코드 필요없이 결과 출력을 data model 또는 UI control의 property로 바인딩하여 keypath를 통해 데이터를 화면에 직접 표시할 수 있습니다.
Subscription
Publishers, Operators, Subscribers의 전체 체인을 설명하는 용어입니다.
subscription이 끝날 때 subscriber를 추가하면 체인 시작부분에서 publisher를 ‘활성화’합니다.
잠재적으로 출력을 받을 subscriber가 없으면 publisher는 값을 내보내지 않습니다 → ⭐️기억해야 할 중요 사항!
Subscription은 custom 코드와 Error처리가 있는 비동기 이벤트 체인을 한 번만 선언할 수 있습니다.
코드가 Combine으로 이루어져 있을 경우, Subscription을 통해 앱의 전체 로직을 설명할 수 있고 작업이 완료되면 데이터를 push 혹은 pull하거나 이 개체 혹은 다른 개체를 콜백할 필요없이 시스템이 모든 것을 실행하도록 할 수 있습니다.

설계된 대로 subscription은 사용자의 제스처, 타이머 꺼짐 혹은 다른 무언가가 publisher 중 하나를 깨울 때마다 비동기적으로 ‘실행(fire)’됩니다.
Cancellable
시스템에서 제공하는 두 Subscriber(sink, assign) 모두 Cancellable 프로토콜을 준수하고, 이는 subscription코드(전체 publisher, operators, subscriber 체인)가 AnyCancellable 객체를 반환합니다.
메모리에서 해당 객체를 해제할 때마다, 전체 subscription이 취소되고, 해당 리소스가 메모리에서 해제됩니다.
Combine의 핵심 기본요소는 Publishers, Operators, Subscribers.
다른 요소들도 있지만 위 세가지는 필수입니다.
Publishers
하나 이상의 Subscriber에게 시간이 지남에 따라 값을 내보낼 수 있는 타입입니다.
수학 연산, 네트워킹, User event 처리를 포함한 거의 대부분의 Publisher의 내부 로직과 관계없이 3가지 타입의 이벤트를 내보낼 수 있습니다.
- Publisher의 Generic타입의 Output
- Success 완료
- Publisher의 Failure타입의 error가 있는 완료
Publisher는 0개 이상의 Output값을 내보낼 수 있고, 성공 혹은 실패로 완료된 경우 다른 이벤트를 내보낼 수 없습니다.
아래는 시간이 지남에 따라 Int값을 내보내는(emit) Publisher를 타임라인에서 시각화한 그림 → 마블 다이어그램

- 파란 박스: 타임라인에서 지정된 시간에 방출된 값을 나타내고 숫자는 방출된 값을 나타냅니다.
- 다이어그램의 오른쪽에 수직선: 성공적인 Stream완료를 의미합니다.
마블 다이어그램은 소프트웨어 내의 모든 종류의 동적 데이터를 나타낼 수 있습니다. 그래서 숫자 계산, 네트워크 호출, 사용자 제스처 반응 또는 화면상의 데이터 표시에 관계없이 Combine Publisher를 사용하여 앱 내의 모든 작업을 처리할 수 있습니다.
Publisher Protocol은 두가지 유형이 일반적입니다.
- Publisher.Output은 Publisher의 출력 값의 타입입니다. Int publisher라면 String이나 Date값을 내보낼 수 없습니다.
- Publisher.Failure는 Publisher가 실패할 경우 발생할 수 있는 Error 타입입니다. Publisher가 절대 실패할 수 없는 경우 Never failure타입을 지정해줍니다.
특정 Publisher를 Subscribe하면 예상되는 값과 실패할 수 있는 Error를 알 수 있습니다.
Operators
Operators는 동일한 Publisher 혹은 새 Publisher를 반환하는 Publisher protocol에서 선언된 메서드입니다.
Operators는 Subscription 중 복잡한 처리를 구현하기 위해 결합(combine)시켜서 사용할 수 있습니다.

Operators는 항상 업스트림(Upstream)과 다운스트림(Downstream)이라고 하는 입력과 출력을 항상 가지고 있습니다.
→ 이를 통해 ‘공유상태’를 피할 수 있습니다.
Operators는 이전 Operator로부터 받은 데이터로 작업하는 데 중점을 두고 체인의 다음 Operator에게 출력을 제공합니다.
즉 비동기적으로 실행되는 다른 어떤 코드도 작업중인 데이터에 끼어들어 변경할 수 없습니다.
Subscribers
모든 Subscription은 Subscriber와 함께 끝납니다.
Subscriber는 보통 내보낸 출력 혹은 completion 이벤트로 ‘무언가’를 수행합니다.

Combine은 데이터 스트림 작업을 간단하게 만드는 두개의 기본 제공 Subscriber를 제공합니다.
- sink subscriber를 사용하면 Output 값 및 completion을 수신할 코드와 함께 closure를 제공할 수 있습니다. 거기서 받은 이벤트로 원하는대로 할 수 있습니다.
- assign subscriber를 사용하면 custom 코드 필요없이 결과 출력을 data model 또는 UI control의 property로 바인딩하여 keypath를 통해 데이터를 화면에 직접 표시할 수 있습니다.
Subscription
Publishers, Operators, Subscribers의 전체 체인을 설명하는 용어입니다.
subscription이 끝날 때 subscriber를 추가하면 체인 시작부분에서 publisher를 ‘활성화’합니다.
잠재적으로 출력을 받을 subscriber가 없으면 publisher는 값을 내보내지 않습니다 → ⭐️기억해야 할 중요 사항!
Subscription은 custom 코드와 Error처리가 있는 비동기 이벤트 체인을 한 번만 선언할 수 있습니다.
코드가 Combine으로 이루어져 있을 경우, Subscription을 통해 앱의 전체 로직을 설명할 수 있고 작업이 완료되면 데이터를 push 혹은 pull하거나 이 개체 혹은 다른 개체를 콜백할 필요없이 시스템이 모든 것을 실행하도록 할 수 있습니다.

설계된 대로 subscription은 사용자의 제스처, 타이머 꺼짐 혹은 다른 무언가가 publisher 중 하나를 깨울 때마다 비동기적으로 ‘실행(fire)’됩니다.
Cancellable
시스템에서 제공하는 두 Subscriber(sink, assign) 모두 Cancellable 프로토콜을 준수하고, 이는 subscription코드(전체 publisher, operators, subscriber 체인)가 AnyCancellable 객체를 반환합니다.
메모리에서 해당 객체를 해제할 때마다, 전체 subscription이 취소되고, 해당 리소스가 메모리에서 해제됩니다.