Reducint
title: 2025-08-23 author: 강병호 date: 2025-08-23 category: TIL/강병호/2025/08 layout: post —
5. 리듀싱
스트림 요소를 조합해 더 복잡한 질의를 표현하기 위한 것으로 모든 스트림 요소를 처리해서 값으로 도출하는 연산이다. 이를 함수형 프로그래밍 언어 용어로 fold라고도 부른다.
요소의 합
다음 코드처럼 reduce를 이용해 요소의 합을 구할 수 있다.
```
// for-each loop 이용
int sum = 0;
for (int x : numbers) {
sum += x;
}
// reduce 이용
int sum = numbes.stream().reduce(0, (a, b) -> a + b);
```
위와 같이 reduce
를 이용해 반복된 패턴을 추상화하여 처리할 수 있다.
reduce
의 인수는 다음과 같다.
- 초깃값 : 0
- 두 요소를 조합해 새로운 값을 만드는 BinaryOperator<
T
>
최댓값과 최솟값
reduce
를 활용해 최대, 최소 값을 찾을 수 있다.
```
Optional<Integer> max = numbers.stream().reduce(Integer::max);
Optional<Integer> min = numbers.stream().reduce(Integer::min);
```
[!reduce 메서드의 장점과 병렬화] > 기존의 단계적 반복으로 합계를 구하는 것과 다르게
reduce
를 이용하면 내부 반복이 추상화되면서 내부 구현에서 병렬로reduce
를 실행할 수 있게 된다. > 예를 들어, 반복적인 합계에서는sum
변수를 공유해야 하기에 쉽게 병렬화하기 어렵다. 강제적으로 동기화시켜도 스레드간의 소모적인 경쟁으로 인해 그 이득은 상쇄된다.