Dart 언어 오답노트 : 31. reduce()

샤워실의 바보·2023년 10월 27일
0
post-thumbnail

reduce 함수는 Dart (그리고 다른 많은 프로그래밍 언어에서도) 리스트의 모든 요소를 순회하면서 단일 값을 계산할 때 사용됩니다. reduce 함수는 주로 누적 계산을 위해 사용됩니다. 예를 들어, 리스트의 모든 요소를 더하거나 곱하는 등의 작업을 할 때 사용할 수 있습니다.

reduce 함수는 다음과 같은 형태로 사용됩니다:

T reduce(T combine(T value, T element))

여기서 T는 리스트의 요소 타입입니다. reduce 함수는 두 개의 매개변수를 받는 combine 함수를 인자로 받습니다:

  • value: 현재까지의 누적된 값입니다. 첫 번째 호출에서는 리스트의 첫 번째 요소가 됩니다.
  • element: 현재 처리하고 있는 리스트의 요소입니다.

combine 함수는 계산된 누적 결과를 반환하며, 이 값은 다음 단계의 value 매개변수로 사용됩니다.

reduce 함수의 결과는 리스트의 모든 요소를 combine 함수로 처리한 후의 최종 누적 값입니다.

예제 코드에서는 numbers 리스트의 모든 요소를 더하는 예를 보여줍니다:

void main() {
  List<int> numbers = [
    1,
    3,
    5,
    7,
    9,
  ];
  
  // 첫 번째 예제: 각 단계에서 어떤 일이 발생하는지 확인
  final int result = numbers.reduce((prev, next){
    print('=====================');
    print('previous: $prev');
    print('next: $next');
    print('total: ${prev + next}');
    
    return prev + next;
  });
  
  print(result); // 출력: 25
  
  // 두 번째 예제: 람다 함수를 사용하여 간결하게 표현
  final int result2 = numbers.reduce((prev, next) => prev + next);
  print(result2); // 출력: 25
  
  // 세 번째 예제: 문자열 리스트를 사용하여 문장 만들기
  List<String> words = [
    '안녕하세요, ',
    '저는 ',
    'Joe입니다.',
  ];
 
  final sentence = words.reduce((prev, next) => prev + next);
  print(sentence); // 출력: 안녕하세요, 저는 Joe입니다.
}

첫 번째, 두 번째 예제

이 예제에서 reduce 함수는 리스트 numbers의 모든 요소를 더하며, 각 단계의 누적 값과 현재 요소의 값을 출력합니다. 최종 결과는 25입니다.

Dart의 reduce 메서드는 리스트의 요소들을 결합하여 단일 값을 반환합니다. reduce 함수는 두 개의 인자를 취하는 콜백 함수와 리스트를 인자로 받습니다. 콜백 함수는 누적된 값(누적자)과 현재 리스트의 요소를 인자로 받고, 새로운 누적된 값을 반환합니다.

코드에서 numbers 리스트에는 정수가 포함되어 있습니다. reduce 메서드를 사용하여 이러한 정수들의 합을 계산합니다.

reduce 함수는 리스트의 첫 번째 요소에서 시작하여 두 번째 요소와 함께 콜백 함수를 호출합니다. 이 결과 (1 + 3 = 4)는 다음 단계의 누적자 값이 됩니다. 이 과정은 리스트의 모든 요소에 대해 반복됩니다.

  • 1단계: 1 (누적자) + 3 (다음 요소) = 4
  • 2단계: 4 (누적자) + 5 (다음 요소) = 9
  • 3단계: 9 (누적자) + 7 (다음 요소) = 16
  • 4단계: 16 (누적자) + 9 (다음 요소) = 25

최종 결과인 25가 반환되고 출력됩니다. 이 예제는 reduce 함수가 어떻게 작동하는지 보여주며, 리스트의 모든 요소를 사용하여 단일 값을 계산하는데 유용함을 보여줍니다.

reduce 함수는 리스트의 모든 요소를 사용합니다. 그러나 reduce 함수는 첫 번째 요소에서 시작하여 두 번째 요소와 함께 콜백 함수를 호출합니다. 그 결과 값은 다음 요소와 함께 콜백 함수를 다시 호출하는 데 사용됩니다. 이 과정은 리스트의 마지막 요소까지 계속됩니다.

예를 들어, numbers 리스트가 [1, 3, 5, 7, 9] 라고 하면, reduce 함수는 다음과 같이 작동합니다:

  1. 첫 번째 요소 (1)와 두 번째 요소 (3)를 가져와서 콜백 함수를 호출합니다. 콜백 함수는 두 값을 더한 결과 (4)를 반환합니다.
  2. 반환된 값 (4)과 세 번째 요소 (5)를 가져와서 콜백 함수를 호출합니다. 콜백 함수는 두 값을 더한 결과 (9)를 반환합니다.
  3. 반환된 값 (9)과 네 번째 요소 (7)를 가져와서 콜백 함수를 호출합니다. 콜백 함수는 두 값을 더한 결과 (16)를 반환합니다.
  4. 반환된 값 (16)과 다섯 번째 요소 (9)를 가져와서 콜백 함수를 호출합니다. 콜백 함수는 두 값을 더한 결과 (25)를 반환합니다.
  5. 마지막으로, reduce 함수는 최종 결과인 25를 반환합니다.

따라서 reduce 함수는 리스트의 모든 요소를 사용하지만, 각 단계에서는 현재 누적된 결과와 다음 요소만 사용됩니다.

세 번째 예제

세 번째 예제에서는 reduce() 메서드를 사용하여 문자열 리스트 words의 모든 요소를 하나의 문자열로 합치는 과정을 보여줍니다. 이 예제는 문자열 리스트를 합치는 데 reduce() 메서드가 어떻게 사용될 수 있는지 보여주며, 간단한 예시임에도 불구하고 reduce()의 동작 방식을 이해하는 데 도움을 줍니다.

List<String> words = [
  '안녕하세요, ',
  '저는 ',
  'Joe입니다.',
];
 
final sentence = words.reduce((prev, next) => prev + next);
print(sentence); // 출력: 안녕하세요, 저는 Joe입니다.
  1. words 리스트는 세 개의 문자열 요소를 포함하고 있습니다: '안녕하세요, ', '저는 ', 'Joe입니다.'.

  2. reduce() 메서드는 리스트의 첫 번째 요소 '안녕하세요, '를 초기값으로 사용하고, 리스트의 두 번째 요소 '저는 '을 첫 번째 단계의 next 값으로 사용합니다.

  3. 첫 번째 단계에서 콜백 함수 (prev, next) => prev + next는 실행되어 '안녕하세요, ''저는 '를 합칩니다. 결과적으로 '안녕하세요, 저는 '이라는 새로운 문자열이 생성됩니다.

  4. 이제 '안녕하세요, 저는 '은 다음 단계의 prev 값으로 사용되며, 'Joe입니다.'next 값으로 사용됩니다.

  5. 두 번째 단계에서 콜백 함수는 다시 실행되어 '안녕하세요, 저는 ''Joe입니다.'를 합칩니다. 결과적으로 '안녕하세요, 저는 Joe입니다.'이라는 최종 문자열이 생성됩니다.

  6. 리스트의 모든 요소가 처리되었기 때문에 reduce() 메서드는 최종 결과인 '안녕하세요, 저는 Joe입니다.' 문자열을 반환합니다.

  7. print(sentence) 구문은 이 최종 결과를 콘솔에 출력합니다.

이 예제를 통해 reduce() 메서드가 리스트의 모든 요소를 순회하면서 누적값을 계산하는 방법을 볼 수 있습니다. 문자열 리스트를 하나의 문자열로 합치는 것은 reduce()의 많은 용도 중 하나일 뿐이며, 이 메서드는 다양한 상황에서 유용하게 사용될 수 있습니다.

profile
공부하는 개발자

0개의 댓글