스트림(Stream)은 자바 8부터 도입된 새로운 기능으로, 컬렉션을 처리하는 데 다양한 기능을 제공합니다. 스트림은 연속된 데이터 요소들의 집합을 나타내며, 이를 활용하여 데이터를 처리하고 변환하는 작업을 수행할 수 있습니다.
스트림의 작업은 중간 연산과 최종 연산으로 구분됩니다. 중간 연산은 원본 스트림을 변환하고, 최종 연산은 스트림에서 최종 결과를 생성하거나 반환합니다.
중간 연산 (Intermediate Operations)
중간 연산은 스트림을 변환하거나 필터링하는 데 사용됩니다. 여러 가지 중간 연산을 연속해서 적용할 수 있으며, 원본 데이터를 변경하지 않고 새로운 스트림을 생성합니다.
자주 사용되는 중간 연산에는 다음과 같은 것들이 있습니다:
- filter(predicate) : 주어진 조건에 맞는 요소들만 필터링하여 새로운 스트림을 반환합니다.
- map(function) : 주어진 함수를 적용하여 각 요소를 변환하고, 변환된 요소들로 구성된 새로운 스트림을 반환합니다.
- sorted(comparator) : 요소들을 주어진 비교자(comparator)에 따라 정렬하여 새로운 스트림을 반환합니다.
- distinct() : 중복된 요소들을 제거하고, 유일한 요소들로 구성된 새로운 스트림을 반환합니다.
중간 연산은 ‘지연 연산’으로 처리되어 스트림 파이프라인을 구축하는 데 사용됩니다. 따라서 중간 연산을 수행해도 실제로는 데이터가 처리되지 않고, 최종 연산이 호출될 때까지 기다립니다.
최종 연산 (Terminal Operations)
최종 연산은 스트림에서 최종 결과를 생성하거나 반환하는 데 사용됩니다. 최종 연산은 스트림을 끝내고 스트림 파이프라인을 실행시킵니다.
자주 사용되는 최종 연산에는 다음과 같은 것들이 있습니다:
- forEach(consumer) : 각 요소에 대해 주어진 동작을 수행합니다.
- collect(collector) : 스트림의 요소들을 수집하여 새로운 컬렉션을 생성합니다.
- count() : 스트림의 요소의 개수를 반환합니다.
- min(comparator) / max(comparator) : 주어진 비교자에 따라 스트림의 최소 값 또는 최대 값을 반환합니다.
최종 연산은 스트림을 소모하며, 한 번만 호출될 수 있습니다. 중간 연산을 어떤 순서로 적용하든 최종 연산의 결과는 동일하게 나옵니다.
스트림의 중간 연산과 최종 연산을 조합하여 다양한 데이터 처리 작업을 수행할 수 있습니다. 스트림은 데이터의 처리를 간결하게 표현하고, 병렬 처리 및 성능 최적화에도 큰 장점을 제공합니다.
자세한 내용은 다음 자료를 참고하시기 바랍니다: