# Stream?
- **Stream은 데이터 흐름을 나타내는 핵심 개념입니다.**
## Stream이란?
- **iOS 앱을 생각해보면, 사용자의 입력, 네트워크 요청, 타이머 이벤트 등 다양한 이벤트들이 발생합니다. 이런 이벤트들을 연속적인 데이터의 흐름, 즉 'Stream'으로 바라보는 것이 RxSwift의 기본 아이디어입니다.**
- **Stream은 연속적인 데이터의 흐름을 나타내며, 이를 'Observable'이라고 합니다. 이 Observable은 시간에 따라 값들을 방출하게 되며, 이러한 값들을 구독하고 반응하는 것이 RxSwift의 핵심 동작 방식입니다.**
- 비동기를 포함한 모든 Event들을 Stream으로 봅니다. 즉, 스트림이란 시간 순서로 전달되어지는 값들의 Collection입니다.
## 예시
- **사용자가 버튼을 누를 때마다 '눌림'이라는 이벤트가 발생한다고 생각해보세요.**
- 이 '눌림' **이벤트들을 연속적인 데이터 흐름**, 즉 **Stream**으로 바라보고, 해당 Stream에 반응하여 특정 작업을 수행하게 됩니다.
## 업스트림
업스트림은 데이터의 원천 혹은 시작점을 의미합니다. 비동기적인 이벤트나 데이터가 발생하는 곳으로, 이곳에서 데이터가 생성되어 다운스트림으로 전달됩니다.
예를 들면, Combine에서의 Publisher나 RxSwift의 Observable은 업스트림의 역할을 합니다. 이들은 데이터를 생성하거나 변경된 데이터를 전달하는 역할을 합니다.
## 다운스트림
다운스트림은 업스트림에서 발생한 데이터나 이벤트를 수신하고 처리하는 부분입니다. 이곳에서 실제로 데이터를 사용하여 UI 업데이트, 데이터 변환, 저장 등의 작업을 수행합니다.
Combine의 Subscriber나 RxSwift의 Observer는 다운스트림의 역할을 합니다. 이들은 업스트림에서 전달된 데이터를 수신하여 필요한 동작을 수행하는 역할을 합니다.
### 업/다운스트림 요약
iOS 프로그래밍에서 업스트림과 다운스트림은 데이터나 이벤트의 흐름을 설명하는 데 사용되는 용어입니다. 업스트림은 데이터의 원천이며, 다운스트림은 그 데이터를 수신하고 처리하는 부분을 의미합니다. 이 두 용어는 특히 비동기 프로그래밍의 컨텍스트에서 중요하며, 데이터의 흐름과 처리 방식을 명확하게 이해하는 데 도움을 줍니다.