[Java] 상태 없는 연산(stateless operation) VS 상태 있는 연산(stateful operation)
1. Question
스트림 연산에서 상태 없음(stateless operation)
과 상태 있음(stateful operation)
의 차이점은 무엇인가?
2. Answer
상태 없는 연산(stateless operation)
은 스트림의 각 요소를 개별적으로 처리하며, 다른 요소들과 독립적으로 작업을 수행한다. 이러한 연산은 현재 처리 중인 요소 외에는 어떠한 정보도 유지하지 않으며, 따라서 이전 또는 이후의 요소에 대한 정보 없이도 각 요소를 처리할 수 있다. 예시로는 filter
와 map
이 있다.
상태 있는 연산(stateful operation)
은 스트림의 요소를 처리할 때, 전체 스트림의 요소나 특정 범위의 요소에 대한 정보를 유지해야 한다. 이렇나 연산은 일반적으로 스트림의 요소들 사이의 상호 작용을 필요로 하며, 결과를 생성하기 위해 전체 입력 스트림에 대한 정보를 알아야 한다. 예시로는 distinct
, sorted
, limit
, skip
이 있다.
3. Detail
A. 연산 특징
(1) 상태 없는 연산
-
메모리 효율성: 상태 없는 연산은 처리 중인 요소 외에 추가적인 메모리를 거의 또는 전혀 사용하지 않는다.
-
병렬 처리 용이성: 개별 요소가 독립적으로 처리되기 때문에, 상태 없는 연산은 병렬 처리에 매우 적합하다.
(2) 상태 있는 연산
-
메모리 사용량: 상태 있는 연산은 처리할 데이터의 양에 따라 메모리 사용량이 증가할 수 있다.
-
병렬 처리 복잡성: 스트림의 요소들 사이에 상호 의존성이 있기 때문에, 상태 있는 연산은 병렬 처리 시 추가적인 주의가 필요하다.
4. Reference
- “모던 자바 인 액션” (저자: 라울-게이브리얼 우르마, 마리오 푸스코, 앨런 마이크로프트)
댓글남기기