4장. 스트림 소개

4장. 스트림 소개

Stream 이란, ‘데이터 처리 연산을 지원하도록, source 에서 추출된 연속된 요소(sequence of elements)’ 라고 한다.

연속된 요소

컬렉션과 마찬가지로 (특정 요소 형식으로 이루어진) 연속된 값 집합의 인터페이스를 제공한다.

컬렉션은 자료구조(data structure)이므로, 시간/공간 복잡도에 대한 고려, 저장, 접근 연산이 주를 이룬다.

반면, 스트림은 filter, sorted, map 과 같은 표현식(표현 계산식)이 주를 이룬다.

즉, 컬렉션의 주제는 데이터(data)이고 스트림의 주제는 계산(operation, calculation)이다.

소스(Source)

스트림은 컬렉션, 배열, I/O 자원 등의 ‘데이터 소스’로부터 데이터를 소비한다.

예를 들어, 정렬된 컬렉션으로 스트림을 생성하면 정렬이 유지되고 리스트로 스트림을 만들면 리스트의 요소와 같은 순서를 유지한다.

데이터 처리 연산

스트림은 “함수형 언어에서 (일반적으로)지원하는 연산 + 데이터베이스와 비슷한 연산” 을 지원한다.

예를 들어, filter, map,, reduce, find, match, sort 등의 연산이 있다.

이들을 순차적으로, 병렬적으로 실행할 수 있다.


파이프라이닝(pipelining)

(대부분의) 스트림 연산은 스트림 연산끼리 연결하여 커다란 파이프라인을 구성할 수 있다.

* 커다란 파이프라인을 구성할 수 있도록 자기 자신을 반환한다.

덕분에 Laziness(지연), Short-circuiting(쇼트 서킷) 과 같은 최적화도 얻을 수 있다고 한다.

내부 반복

반복자(iterator)를 이용해서 명시적으로 컬렉션을 순회하는 것과 달리, 스트림은 내부 반복을 지원한다.