1. Dart의 reduce() 함수란?
Dart에서 reduce() 함수는 리스트의 모든 요소를 하나의 값으로 축약하는 기능을 합니다. 주어진 콜백 함수를 사용하여 리스트의 첫 번째 요소부터 마지막 요소까지 차례로 연산을 수행합니다.
2. reduce() 함수의 사용법
List<int> numbers = [10, 20, 30, 40];
int result = numbers.reduce((acc, element) => acc + element);
print(result); // 100
매개변수 설명
- acc: 이전 연산 결과(누적 값, accumulator)
- element: 현재 처리 중인 리스트의 요소
위 코드에서 reduce() 함수는 리스트 [10, 20, 30, 40]을 순회하면서 요소들을 차례로 더하여 최종적으로 100을 반환합니다.
3. reduce() 함수의 동작 원리
위 예제의 동작 순서를 단계별로 살펴보겠습니다.
- acc = 10, element = 20 → 10 + 20 = 30
- acc = 30, element = 30 → 30 + 30 = 60
- acc = 60, element = 40 → 60 + 40 = 100
최종적으로 100이 반환됩니다.
4. 다양한 예제
4.1 곱셈 연산 적용
List<int> numbers = [2, 3, 4];
int product = numbers.reduce((acc, element) => acc * element);
print(product); // 24
4.2 문자열 연결
List<String> words = ["Dart", "is", "awesome"];
String sentence = words.reduce((acc, element) => "$acc $element");
print(sentence); // Dart is awesome
5. reduce() 사용 시 주의점
5.1 빈 리스트에서 사용 시 에러 발생
reduce() 함수는 리스트가 비어 있을 경우 에러를 발생시킵니다.
List<int> emptyList = [];
int result = emptyList.reduce((acc, element) => acc + element); // 에러 발생!
해결 방법으로 fold() 함수를 사용할 수 있습니다.
List<int> emptyList = [];
int result = emptyList.fold(0, (acc, element) => acc + element);
print(result); // 0
5.2 null 값을 포함한 리스트
만약 리스트에 null 값이 포함되어 있다면 reduce() 함수 사용 시 예외가 발생할 수 있습니다. 따라서 null을 미리 필터링하거나 예외 처리를 고려해야 합니다.
6. reduce() vs fold() 차이점
함수 | 초기값 제공 | 빈 리스트 처리 |
reduce() | 초기값 없음 | 예외 발생 |
fold() | 초기값 제공 | 안전하게 처리 |
7. 마무리
Dart의 reduce() 함수는 리스트의 모든 요소를 하나의 값으로 축약할 때 유용합니다. 하지만 빈 리스트를 다룰 때 예외가 발생할 수 있으므로 fold()와 비교하여 적절한 방법을 선택해야 합니다. 위에서 설명한 예제들을 직접 실행해 보면서 활용법을 익혀보세요! 😊