728x90
반응형
728x90
reduce()
배열의 모든 값을 하나로 '누적(accumulate)'하는 데 특화된 자바스크립트 메서드가 있습니다. 바로 reduce() 입니다. 단순한 합계, 객체 그룹핑, 통계 계산, 중첩 구조 해제 등 다양한 상황에서 쓰입니다.
이 글에서는 reduce() 의 기본 개념부터 고급 활용법까지 자세히 알아보겠습니다.
1. reduce()란?
reduce() 는 배열의 각 요소에 대해 주어진 콜백 함수를 실행하여 하나의 최종 결과값으로 줄이는(reduce) 메서드입니다. 기본적으로 누적기를 기반으로 동작하며, 배열을 가공해 숫자, 문자열, 객체 등 어떤 형태든 결과값으로 만들 수 있습니다.
문법
arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
- callback : 각 요소에 대해 실행할 함수
- accumulator : 누적된 결과값
- currentValue : 현재 처리 중인 요소
- index (선택) : 현재 요소의 인덱스
- array (선택) : reduce가 호출된 배열
- initialValue (선택) : 초기 누적값
기본 예제 - 합계 계산
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((acc, curr) => acc + curr, 0);
console.log(sum); // 15
- acc 는 누적 값 (처음에는 0)
- curr 는 배열의 현재 값
2. reduce() 활용 예제
a. 배열 요소의 평균 구하기
const scores = [90, 80, 70];
const average = scores.reduce((acc, curr, _, arr) => acc + curr / arr.length, 0);
console.log(average); // 80
b. 배열을 객체로 변환하기
const entries = [
["name", "Alice"],
["age", 30],
["job", "developer"]
];
const obj = entries.reduce((acc, [key, value]) => {
acc[key] = value;
return acc;
}, {});
console.log(obj); // { name: 'Alice', age: 30, job: 'developer' }
c. 문자열 연결 (구분자 포함)
const words = ["Hello", "world", "!"];
const sentence = words.reduce((acc, curr) => acc + ' ' + curr);
console.log(sentence); // "Hello world !"
d. 특정 조건에 따라 그룹화하기
const users = [
{ name: "Alice", gender: "female" },
{ name: "Bob", gender: "male" },
{ name: "Eve", gender: "female" }
];
const grouped = users.reduce((acc, user) => {
const key = user.gender;
if (!acc[key]) acc[key] = [];
acc[key].push(user);
return acc;
}, {});
console.log(grouped);
// {
// female: [{ name: 'Alice' }, { name: 'Eve' }],
// male: [{ name: 'Bob' }]
// }
3. reduce() 사용 시 주의할 점
a. initialValue는 꼭 명시하자
initialValue를 생략하면 첫 번째 요소가 초기값으로 사용되며, 빈 배열에서 오류를 유발할 수 있습니다.
[].reduce((acc, curr) => acc + curr); // ❌ TypeError 발생
- 해결 : 항상 initialValue를 명시하는 습관을 들이자
[].reduce((acc, curr) => acc + curr, 0); // ✅ 0
b. reduce()는 선언형 코드지만 복잡해질 수 있음
- 너무 복잡한 로직은 가독성을 떨어뜨릴 수 있음
- 코드 분리나 주석, 함수 추출을 통해 가독성을 확보하자
4. reduce() vs 다른 배열 메서드 비교
메서드 | 목적 | 반환값 | 원본 변경 여부 | 비고 |
map() | 변형 | 새 배열 | ❌ | 동일 길이 유지 |
filter() | 조건 필터링 | 새 배열 | ❌ | 길이 달라질 수 있음 |
reduce() | 누적 및 집계 | 단일 값 (or 객체) | ❌ | 초기값 꼭 명시 권장 |
forEach() | 반복 (side effect) | 없음 | ❌ | 반환값 없음, 주로 출력용 사용 |
5. 마무리
- reduce() 는 배열을 하나의 값으로 축약하는 데 사용하는 고차 함수입니다.
- 단순한 합계뿐만 아니라 객체 변환, 그룹화, 통계 등 다양한 데이터 처리 작업에 유용합니다.
- initialValue 를 반드시 지정해 안전하고 일관된 결과를 보장해야 합니다.
- 다른 배열 메서드보다 유연하지만 복잡해질 수 있으니 적절히 사용해야 합니다.
함께 보면 좋은 자료
외부 사이트 :
반응형
728x90
반응형
'언어 > JavaScript' 카테고리의 다른 글
[includes()] 배열에 특정값이 존재하는지 확인하는 방법 (0) | 2025.04.25 |
---|---|
[find()] 조건에 맞는 첫 번째 값을 찾는 방법 (0) | 2025.04.25 |
[map()] 배열 요소 변형의 핵심 메서드 완전 정복 (0) | 2025.04.25 |
[Blob] 브라우저에서 파일 데이터를 다루는 핵심 도구 (0) | 2025.04.25 |
[filter()] 조건에 맞는 요소를 필터링하기 (0) | 2025.04.23 |