fold 함수란?
reduce 함수란?
reduce 함수는 리스트(List)의 모든 요소를 하나의 값으로 축소(Aggregate)하는 함수이다. reduce의 동작방식은 fold와 다른점이 있는데
자바, kotlin 같은 멀티스레딩 언어에서 Reduce 활용
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
int sum = numbers.parallelStream().reduce(0, Integer::sum);
System.out.println(sum); // 36
Step 1: (1+2) (3+4) (5+6) (7+8) // 4개의 스레드 실행
Step 2: (3) (7) (11) (15) // 2개의 스레드 실행
Step 3: (10) (26) // 1개의 스레드 실행
Step 4: (36) // 최종 결과
parallelStream()을 사용하면 이진 트리(Binary Tree Reduction) 방식으로 자동 병렬 처리를 할 수 있다. 따라서 예제와 같이 처리한다면 시간복잡도는 O(log N) 으로 최적화가 된다.
Dart 에서 Reduce 활용
Dart의 reduce는 순차적으로 실행되며, 단일 스레드에서 동작한다. 즉, Java/Kotlin의 parallelStream() 같은 병렬 실행 기능이 기본적으로 제공되지 않는다. 따라서 시간복잡도는 기본적으로 O(N)이다.
Dart 에서 Reduce 와 Fold 선택 요령
도움주신 단톡방의 김노트님께 감사드립니다 :)
'Functional Programming' 카테고리의 다른 글
unit 타입과 void타입의 차이 (0) | 2025.02.06 |
---|---|
Future 와 Task의 차이 (0) | 2025.01.19 |