개발/vue.js

reduce 함수에 대해서 알아보자

개강한 공대생 2024. 8. 12. 14:11

reduce는 for문과 비슷한 함수다.

 

대신 for문보다 좋은게 더 가독성이 좋고 어쩌면 더 최적화된 함수라는 것이다.

 

배열에 있는 모든 값에 대한 연산을 할 때 reduce만한게 없는 것 같다.

 

예시로 살펴보자.

 

totalTables() {
  return this.tables.reduce((sum, table) => sum + (table.count || 0), 0);
}

 

위 함수는 전체 테이블의 수를 계산하는 함수이다.

다음과 같은 함수를 computed에 넣었다고 해보자

여기서 this.tables는 배열이다.

그리고 table은 그 배열 안의 요소이다.

(sum, table)이 부분은 인자다.

=> 이것은 한줄 로직이라는 것을 나타내는 기호이다. 만약에 여러줄 로직이면 { ~~~~ } 이렇게 쓸 것이다..

 

table.count || 0 이 부분은 count 값이 존재하면 그 count 값을 더하고, 아니면 0을 더하는거다.

맨 끝 부분의 , 0); 이 부분은 초기값을 설정해주는 것이다.

만약 1이라고 하면 sum을 계산할 때 1부터 더해준다.

 

만약 위의 코드를 for문을 사용하면 다음과 같다.

 

totalTables() {
  let sum = 0;
  for (let table of this.tables) {
    sum += table.count || 0;
  }
  return sum;
}

 

보다시피 코드가 겁나 길다.. 몇 줄이나 길어진거냐..

이렇게 코드 안짜려고 reduce를 사용하는 것 같다.

 

그러면 sum을 계산하는게 아닌 모든 요소의 값을 곱해주고 싶으면 어떻게 해야할까?

 

totalTables() {
  return this.tables.reduce((mul, table) => mul * (table.count || 1), 1);
}

 

다음과 같이 작성해주면 된다.

여기서 mul은 그냥 임의로 지어준 이름이다. 아무렇게나 지어도 된다. 정 원한다면 sum이라고 지어도 상관없다.

여기서 중요한 포인트는 +가 *로 바뀌고, 초기값을 1로 설정했다는 것이다.

왜 초기값이 1인지는 산수를 잘하면 알 수 있다.. 만약 0으로 설정한다면 곱하는 것마다 0이 되기 때문이다. ㅋㅋ