스트림이라는 용어는 여러분이 어떤 언어를 하든간에 공통적으로 들을수 있는 용어입니다.
그렇다면 이 스트림이라는 용어는 무엇을 의미하는건지 알아보겠습니다.
Stream
위키백과에서 Stream에 대한 정의는 아래와 같이 내리고 있습니다.
컴퓨터 처리 환경에서 스트림은 시간이 지남에 따라 사용할 수 있게 되는 일련의 데이터 요소를 가리키는 수많은 방식에서 쓰인다.
어... 무슨소린지 이해가 되시나요?
잘 이해가 안될겁니다.
조금더 쉽게 접근을 해야할 필요가 있습니다.

Stream을 번역기에 돌려보면 다음과 같은 의미가 나옵니다.
개울의 특성은 어떤가요?
우선 물이 존재합니다.
그럼 그 물이 어떻게 되고 있나요?
"흐르고" 있지 않나요?
흐른다는건 어떤걸까요? 물이 연속해서 어딘가로 향한다 라고 말할수 있습니다.
그렇습니다. 컴퓨터 사이언스에서 스트림이란 일련의 연속성을 갖는 흐름을 뜻하는 것을 말합니다.
해당내용이 너무 추상적인가요?
사실 이 내용은 저희들이 일상생활에서 정말 자주 사용되고있는 기술중 하나입니다.
예를 들어볼까요?
자 여러분이 유튜브에서 영상을 보거나 or 네이버 TV에서 어떤 스포츠 영상을 본다고 가정을 합시다.
당연히 해당 영상을 저장하는 서버에서는 그 영상파일을 저희 컴퓨터로 보낼것인데요.
이때 서버에서 영상파일을 통째로 보낸다면 저희는 파일이 모두 보내질때까지 로딩중인 화면만 보게 될것입니다.
하지만 실제 영상은 어떤가요?

유튜브 영상 예시
당연히 영상을 키자마자 바로 영상을 볼수가 있습니다.
다만 조건이 있죠. 모든 영상을 한번에 볼수있는게 아닌 일정 시간대의 영상까지만 로딩이 된것 말입니다.
저 흰색바 영역을 넘어선다면? 저희들이 흔히 말하는 버퍼링 이라는게 걸리게 되죠..
(이때 다시 다음 버퍼링 영역까지 다운을 받게됨)
이렇게 답답한 상황을 막기 위해 영상 파일을 잘게 쪼개 줄지어 컴퓨터로 보내는것을 스트림의 대표 예시입니다.
사용자 입장에서는 기다림 없이 바로 영상을 볼수 있게 되기 때문에 아주 효울적인것이죠.
특히나 이런 기술이 빛을 발하는 영역이 바로 실시간 영상 송출 영역이죠..
즉 스트림이란 줄줄이 연속적으로 어떤것(데이터)을 흘러가게 하는 동작 원리 방식이라고 이해하시면 됩니다.
프로그래밍에서의 Stream?
프로그래밍 언어는 여러가지가 있지만 C와 JAVA에서의 Stream 사용법에 대해 알아보도록 하겠습니다.
C - 표준 스트림(standard stream)
컴퓨터 프로그램과 단말기 사이에 미리 연결된 입출력 통로를 의미합니다.
(프로그램이 키보드 등을 통해 입력을 받고 해당 연산 수행후 결과값을 모니터에 출력하는 통로)
C에서 스트림은 프로그램을 드나드는 데이터, 파일 등을 바이트의 흐름으로 나타냈다고 합니다.
Java - 입/출력 스트림(Input/ Output Stream)
입/출력 스트림은 C의 표준 스트림과 비스한 개념을 가집니다.
프로그램이 출발지냐 혹은 도착지냐에 따라 스트림의 종류가 결정이 됩니다.
프로그램이 데이터를 입력받을때는 입력스트림을 이용하며, 데이터를 보낼때는 출력 스트림이 사용됩니다.
Java에서의 입/출력 스트림 역시 프로그램을 드나드는 데이터, 파일 등의 바이트 흐름이라고 할수 있습니다.
특이점으로 문자단위 입출력 스트림이 존재한다는 것인데 이것이 여러분이 자주 사용하시는
BufferedReadeer / BufferedWriter 입니다.
Java - 반복자 Stream
자바 8부터 람다와 함께 추가된 반복자로 컬렉션, 배열 등의 저장 요소를 하나씩 참조하여 람다식으로 처리할 수 있도록 만들어준 기능입니다.
이전에는 컬렉션이나 배열등의 원소를 가공할때는 for, foreach 등의 반복자를 통해 각각의 원소에 접근을 하여 가공을 하였으나, 스트림의 경우 특정 타입의 스트림을 선언하여 필요한 형태로 가공하여 반환하게 됩니다.
관련 포스팅
https://blog.naver.com/cjy2103/222828002261
자바(JAVA) 반복문 - Stream (스트림)
람다식을 공부하다보면 스트림이라는 것을 만나보시게 될겁니다. 그렇다면 이 스트림은 또 뭘까요? 스트림(...
blog.naver.com
결론
각각의 언어마다 사용하는 방식이 다르고, 목적이 다르긴 하지만 최종적으로 데이터의 흐름이라는 공통적인 특징을 가지고 있습니다.
즉, 누군가가 스트림이 뭐야? 라고 물었을때 연속된 데이터의 흐름을 처리하는 동작 방식 이라고 말하시면 될것 같습니다.
'개발관련 > 용어' 카테고리의 다른 글
JSON 이란? (0) | 2023.06.30 |
---|---|
DAU, WAU, MAU, BM 이란? (0) | 2023.06.30 |
개발용어 - API란 뭔가요? (0) | 2023.06.29 |
SOLID 원칙이란? (객체지향 5대원칙) (0) | 2023.06.29 |
아키텍처패턴과 디자인 패턴 차이 (0) | 2023.06.29 |