[java] Stream 이란?

Subin Park·2022년 5월 31일
0

Stream

목록 보기
1/2
post-thumbnail

Stream이란?

Java 8에 새로 추가된 기능이다. 요점만 쉽게 말하자면 스트림은 데이터 컬렉션의 반복을 조금더 쉽고 가독성 좋은 방식으로 처리하는 기능이라고 생각하면 된다.
스트림을 '데이터의 흐름'이라고 표현하기도 하는데 filter, map, collect 등의 연산들을 정의 시 정의한 순서대로 타고 따라가며 마치 데이터가 파이프라인을 타고 연산을 수행하는 것과 같은 모습으로 볼 수도 있다. 또한, 스트림을 이용하면 멀티스레드를 위해 코드를 따로 구현하지 않아도 병렬로 쉽게 데이터를 처리할 수 있다.

Stream의 특징

  • 복잡한 코드를 가독성 있게 간결하게 표현할 수 있다.
  • 대량의 데이터를 가공 축소하여 데이터의 합계, 평균값, 집계함수 등 통계 데이터를 간편하게 표현할 수 있다.
  • Stream이 제공하는 요소처리 메서드는 함수적 인터페이스 타입이기 때문에 람다식, 메서드 참조를 이용해 요소처리 내용을 인자로 전달할 수 있다.

Stream VS Collection

기본적으로 Stream과 Collection은 연속된 요소 형식의 값을 저장하는 자료구조 인터페이스를 제공한다. 그렇다면 무엇이 다르기에 둘은 나눠진걸까?

1. 계산 시점의 차이

둘의 가장 큰 차이점으로는 '계산 시점의 차이'가 있다.

Collection: 모든 요소는 컬렉션에 추가하기 전에 계산이 완료되어야 한다.
Stream: 요청할 때만 요소를 계산하는 고정된 자료구조(Stream에 요소를 추가/삭제 불가)이다.

Collection은 데이터를 어떻게 잘 저장하고 접근할 것이냐에 초점을 두었고 Stream의 경우 어떻게 처리할 것인가에 초점을 두었다.

2. 외부반복과 내부반복

Collection은 내부 요소에 대해 처리를 하기 위해서는 외부적으로 for-each 반복문을 통해 데이터에 접근하고 비지니스 로직을 통해 처리해야 했다. 즉, 무언가 처리를 하기 위해 Collection 내부에 모든 값을 가지고 있어야 한다.

반면, Stream의 경우 어떻게 처리할 것인가에 초점을 두었다. Stream은 Collection이 외부 비지니스 로직을 통해 데이터를 처리하는 방법 대신 내부적으로 반복 과정을 숨겨 알아서 데이터를 처리하고 결과를 출력하는 과정을 수행한다. 내부적으로 반복하기 때문에 실제 사용할 때 순차/병렬에 대한 처리를 간단하게 설정할 수 있게 되었다.

0개의 댓글