Open ddackkeun opened 1 year ago
현재 순회 중인 요소를 처리하는 동안 이전에 처리된 데이터 요소의 상태를 유지하지 않는 연산
- 각 요소의 처리는 다른 요소와 독립되어 수행 ⇒ 성능상의 이점
- 상태가 없는 중간 연산으로만 이뤄진 파이프 라인의 경우 데이터 요소에 한 번만 접근
- filter, map, takeWhile 등 연산이 있다.
현재 순회 중인 요소를 처리하는 동안 이전에 처리된 데이터 요소의 상태를 활용하는 연산
특징
한정된 상태가 있는 연산(Bound)
요소의 개수와 상관없이, 수행되기 위해 관리되어야 하는 상태의 크기가 한정되는 연산
- 예시
- min 연산은 여태 작업을 통해 가장 작은 요소를 상태로 가지고 있음
- limit 은 현재까지 순회한 데이터 요소 개수 만큼 상태로 가지고 있음
- reduce는 현재까지 순회한 데이터 결과를 상태로 가지고 있음
한정되지 않은 상태가 있는 연산(Unbound)
스트림 내의 요소에 따라 관리되어야 하는 상태의 크기가 변하는 연산
- 스트림의 모든 요소를 버퍼에 가지고 있어야 연산 가능 ⇒ 데이터 크기가 무한인 상태(무한스트림)에서 문제를 일으킬 수 있음
- 예시
- sorted 연산은 정렬을 하기 위해 모든 요소를 상태로 가지고 있어야 함
- distinct 연산은 이전에 순회한 데이터와 중복되는지 확인을 위해 순회한 데이터 목록을 가지고 있어야 함
결론
문제
해당 장을 학습하면서 연산과 관련하여 상태가 있는 연산과 상태가 없는 연산에 대해 설명하는 부분이 많았다. 이러한 연산의 상태는 추후 7장에서 다룰 병렬 처리와 연관될 것으로 보인다. 그렇다면 상태가 있음과 없음은 병렬 처리에서 어떤 연관성이 있을까?
관련 목차
참고자료