## **1.** Stream이란
---
<aside>
💡 RxSwift는 함수형 프로그래밍으로 코드를 작성할 수 있도록 ReactiveX 프로젝트에서 작성한 오픈소스 라이브러리입니다.
그리고 RxSwift에서는 stream이란 용어를 사용하고 있고, 이는 Combine에서도 사용되고 있음을 여러분이 직접 확인하실 수 있습니다.
이 때 Stream이란 무엇인가요?
</aside>
### TODO
- Stream이 무엇인지 조사해보고, 자신들만의 언어로 정의해주세요
**Publisher가 자신을 구독한 Subscriber에게 데이터를 보내는 과정**
**데이터 처리 과정**
## 2. Combine을 사용하여 리팩토링 해보기
### TODO
```swift
import Combine
struct Food: Decodable {
let name: String
let price: Int
let description: String
}
struct SomeModelV1 {
private let decoder = JSONDecoder()
func request(
fromServer server: SomeServer = SomeServer.shared,
_ completionHandler: @escaping (Food) -> Void
) {
Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in
server.forCallback { foodData in
if let food = try? decoder.decode(Food.self, from: foodData) {
completionHandler(food)
}
}
}
}
func combineRequest(fromServer server: SomeServer = SomeServer.shared) -> AnyPublisher<Food, Error> {
return Timer.TimerPublisher(interval: 1.0, runLoop: .main, mode: .common)
.autoconnect()
.flatMap { date in
server.forValue().decode(type: Food.self, decoder: decoder)
}
.eraseToAnyPublisher()
}
}
```
```swift
var collection :Set<AnyCancellable> = []
let sub: () = SomeModelV1().combineRequest()
.sink { error in
print(error)
} receiveValue: { food in
print(food)
}.store(in: &collection)
```