---
# System prepended metadata

title: "Combine - Serena\U0001F437, Karen\U0001F9A6, Whales\U0001F42C"
tags: [활동학습]

---

# Combine - Serena🐷, Karen🦦, Whales🐬


## **1.** Stream이란

<aside>
💡  RxSwift는 함수형 프로그래밍으로 코드를 작성할 수 있도록 ReactiveX 프로젝트에서 작성한 오픈소스 라이브러리입니다.
 그리고 RxSwift에서는 stream이란 용어를 사용하고 있고, 이는 Combine에서도 사용되고 있음을 여러분이 직접 확인하실 수 있습니다.
 이 때 Stream이란 무엇인가요?

</aside>

### TODO

- Stream이 무엇인지 조사해보고, 자신들만의 언어로 정의해주세요

    → 데이터 흐름을 지칭하는 개념, 데이터를 일련의 연속적인 요소로 나타내며 이 요소들은 순차적으로 처리됨
    → swift에는 데이터를 스트림 처리하는 방식으로 사용되는 기능이 있음



## 2. Combine을 사용하여 리팩토링 해보기

[ForCombine.zip](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b75c1966-17d2-4b50-b065-2a81d10f0dd5/ForCombine.zip)

- 위 프로젝트를 다운로드 받습니다
- 프로젝트에는 GCD와 callback을 활용한 기능들이 작성되어있습니다.

### TODO

- 위 기능을 Combine을 활용하여 리팩토링 해보도록 합니다
- 우리의 목표는 스트림을 통해 Food를 main에 전달할 수 있는, 새로운 모델을 만드는 것입니다
- Server에서는 이미 Combine을 활용하여 값을 내려받을 수 있도록 API를 제공하고 있습니다.
    - 일단 이를 활용하는 게 우선이지만, 새로운 기능을 추가해도 괜찮습니다
- Combine.Publisher 문서를 참고합니다
- 또 이미 작성되어있는 Server의 코드를 참고해보도록 합시다
    
    <aside>
    💡 Hint
    1. 우리는 Publisher를 합성해나가야 합니다.
    2. GCD에서 Timer를 사용하는 것처럼 시간을 반복하고 싶은 경우 TimerPubllisher를 사용해야 합니다.
    3. TimerPubllisher는 꼭 autoconnect()를 오퍼레이터를 사용해줍니다
    4. 시간이 여유롭다면, TimerPubllisher는 왜 autoconnect를 호출해야하는지도 찾아봅시다
    
    </aside>