스트림 (컴퓨팅)
외관

컴퓨터 과학에서 스트림(stream)은 시간이 지남에 따라 이용 가능한, 잠재적으로 무한한 데이터 요소의 수열이다. 스트림은 대량으로 한꺼번에 처리되는 것이 아니라 컨베이어 벨트 위에 놓인 항목들을 하나씩 처리하는 것으로 생각할 수 있다. 스트림은 일괄 처리 데이터와는 다르게 처리된다.
일반 함수는 잠재적으로 무한한 데이터를 가질 수 있기 때문에 스트림 전체에 대해 연산할 수 없다. 형식적으로, 스트림은 유한한 데이터가 아닌 코데이터(codata, 잠재적으로 무한함)이다.
스트림을 처리하여 또 다른 스트림을 생성하는 함수는 필터라고 알려져 있으며, 함수 합성과 유사한 방식으로 파이프라인에 연결할 수 있다. 필터는 스트림의 항목을 한 번에 하나씩 처리하거나, 이동평균과 같이 여러 입력 항목에 기반하여 하나의 출력 항목을 생성할 수 있다.
예시
[편집]스트림이라는 용어는 여러 유사한 방식으로 사용된다.
- 스트림 편집: sed, awk, 펄과 같은 도구가 있다. 스트림 편집은 파일을 사용자 인터페이스로 불러올 필요 없이 파일들을 그 자리에서 직접 처리한다. 이러한 사용의 한 예로 명령 줄에서 디렉터리에 있는 모든 파일의 내용을 검색하고 치환하는 작업이 있다.
- 유닉스 및 C 언어 기반의 관련 시스템에서 스트림은 데이터의 원천 또는 싱크이며, 일반적으로 개별 바이트나 문자를 의미한다. 스트림은 파일을 읽거나 쓸 때, 또는 네트워크 소켓을 통해 통신할 때 사용되는 추상화이다. 표준 스트림은 모든 프로그램에서 사용할 수 있도록 제공되는 세 가지 스트림이다.
- 입출력 장치는 시간이 지남에 따라 잠재적으로 무한한 데이터를 생성하거나 소비하기 때문에 스트림으로 해석될 수 있다.
- 객체 지향 프로그래밍에서 입력 스트림은 일반적으로 반복자 또는 시뮬라에서 사용되는 것과 같은 수열로 구현된다.[1]: 12.1
- 스킴 및 기타 언어에서 스트림은 느긋한 계산법을 따르거나 지연된 데이터 요소의 수열이다. 스트림은 리스트와 유사하게 사용할 수 있지만, 나중에 나오는 요소들은 필요할 때만 계산된다. 따라서 스트림은 무한한 수열과 급수를 표현할 수 있다.[2]
- 스몰토크 표준 라이브러리와 다른 프로그래밍 언어에서도 스트림은 외부 반복자이다. 스킴에서와 마찬가지로 스트림은 유한하거나 무한한 수열을 나타낼 수 있다.
- 스트림 프로세싱 — 병렬 처리, 특히 그래픽 처리 분야에서 스트림이라는 용어는 소프트웨어뿐만 아니라 컴퓨터 하드웨어에도 적용된다. 여기서는 프로그램 상태가 스트림의 시작 조건을 만족하자마자 데이터플로 프로그래밍 언어로 처리되는 준연속적인 데이터 흐름을 정의한다.
응용
[편집]기타 용도
[편집]스트림이라는 용어는 파일 시스템 포크에도 적용되는데, 여기서는 하나의 파일 이름에 여러 데이터 세트가 연결된다. 가장 흔히 일반적인 파일 데이터를 구성하는 하나의 메인 스트림이 존재하며, 추가적인 스트림들은 메타데이터를 포함한다. 여기서 스트림은 확장 속성과 같은 고정 크기 메타데이터와 대비되는 가변 크기 데이터를 나타내기 위해 사용되지만, 다른 곳에서 사용되는 의미인 '시간에 따라 이용 가능한 데이터, 잠재적으로 무한함'과는 다르다.
같이 보기
[편집]각주
[편집]- ↑ Dahl, Ole-Johan; Myhrhaug, Bjørn; Nygaard, Kristen (1970). Common Base Language (PDF) (보고서). Norwegian Computing Center. 2024년 9월 19일에 원본 문서에서 보존된 문서. 2025년 8월 20일에 확인함.
- ↑ SRFI 41: Streams