자바 8 인 액션

4. 스트림 소개

Featured image

스트림을 활용하면 많은 요소를 포함하는 커다란 컬렉션을 처리하는 경우, 성능을 높이기 위해 병렬로 처리하려 할 때 스트림을 활용함으로써 간결하게 구현할 수 있다.또한 SQL에서의 필터링, 그룹화 등을 간편하게 구현할 수 있다.

스트림이란?

자바 API에 새로 추가된 기능으로, 선언형(데이터를 처리하는 임시 구현 코드 대신 질의로 표현 가능한)으로 컬렉션 데이터를 처리할 수 있다. filter나 sorted, map, collect와 같은 연산은 고수준 빌딩 블록(high-level building block)으로 이루어져있어, 자유롭게 사용이 가능해진다. 결과적으로 데이터 처리 과정을 병렬화 하면서 thread와 lock을 걱정할 필요가 없다.

스트림의 특징

스트림 시작

스트림의 정의는 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소 로 정의할 수 있다.

스트림과 컬렉션

컬렉션

스트림

내부 반복은 투명한 병렬 처리최적화된 다양한 순서로 처리가 가능해진다. 또한 데이터 표현과 HW를 활용한 병렬성 구현을 자동으로 선택한다.

내부/외부 반복

스트림 연산

스트림 연산은 다음과 같이 크게 두 가지로 구분할 수 있다. 연결할 수 있는 스트림 연산인 중간 연산과, 스트림을 닫는 연산인 최종 연산이다.

중간 연산

중간 연산은 최종 연산을 스트림 파이프라인에 실행하기 전까지 아무 연산도 수행하지 않는다. 중간 연산을 모두 합친 후, 합쳐진 중간 연산을 최종 연산으로 한 번에 처리한다.

최종 연산

최종 연산은 스트림 파이프라인에서 결과를 도출한다.(ex. forEach)

스트림 이용 과정

스트림 파이프라인 개념은 빌더 패턴과 비슷하다.

참고 http://tcpschool.com/java/java_stream_intermediate