## **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) ```