forEach()
vs map()
forEach()
const numbers = [1, 2, 3, 4];
numbers.forEach((num) => { console.log(num * 2); });
목적
- 배열의 각 요소에 대해 주어진 함수를 실행한다.
forEach
는 요소를 변형하거나 side effect(사이드 이펙트/부수효과) 를 발생시키는 작업(예: DOM 조작, 콘솔 출력)을 수행할 때 주로 사용된다.
반환 값
forEach
는undefined
를 반환한다.- 즉, 배열을 순회하며 작업을 수행할 뿐, 새로운 배열을 반환하지 않는다는 뜻이다.
변형 가능성
- 원본 배열은 변형되지 않으며,
forEach
안에서 수정하지 않는 한 원래 배열은 그대로 유지된다.
map()
const numbers = [1, 2, 3, 4];
const doubled = numbers.map((num) => num * 2); console.log(doubled); // [2, 4, 6, 8]
목적
- 배열의 각 요소에 대해 주어진 함수를 실행하고, 그 결과를 기반으로 새로운 배열을 만든다.
map
은 주로 배열을 변환(transform)하여 새로운 배열을 얻고자 할 때 사용된다.
반환 값
map
은 새로운 배열을 반환한다.- 이 배열은 원본 배열의 각 요소에 대해 주어진 함수를 실행한 결과로 이루어진다.
변형 가능성
- 원본 배열은 변형되지 않으며, 새로운 배열이 생성된다.
참고
- map은 새로운 배열을 만들고 반환하기 만들기 때문에, 메모리를 할당한다.
- 성능 면에서 map()이 forEach()보다 빨라 유리하다고 한다.
반환 값:
forEach
는undefined
를 반환하고, 배열을 순회하며 주어진 작업을 수행하는 데 그친다.map
은 주어진 함수를 실행한 결과로 이루어진 새로운 배열을 반환한다.
사용 목적:
forEach
는 주로 배열의 각 요소에 대해 작업을 수행하기 위한 목적으로 사용된다(부수효과).map
은 배열을 변환하여 새로운 배열을 얻고자 할 때 사용된다.
원본 배열:
- 두 메서드 모두 원본 배열을 변경하지 않는다.
- 그러나
forEach
에서 배열의 요소를 직접 수정하는 코드를 작성할 경우 원본 배열이 변경될 수 있다.
forEach
및 부수효과forEach
forEach
는 배열의 각 요소를 한 번씩 순회하면서 주어진 함수를 실행하는 메서드라고 위에서 언급했다.forEach
는 작업을 실행할 뿐이라는 것이다.console.log
).forEach
와 부수효과forEach
는 주로 부수효과를 발생시키기 위해 사용된다고 했다. forEach
를 사용다.const numbers = [1, 2, 3, 4];
let sum = 0;
numbers.forEach((num) => {
sum += num; // 부수효과: sum이라는 외부 변수를 수정하고 있음
});
console.log(sum); // 10
forEach
는 배열의 각 요소를 sum
에 더하는 작업을 수행한다.sum
이라는 외부 변수의 값을 변경하는 것이 부수효과이다.forEach
자체는 값을 반환하지 않지만, sum
의 값을 변화시키는 외부 효과를 발생시킨다.forEach
는 특정 값을 반환하지 않기 때문에, 특정 변수의 상태값을 변경하기 위해서는 부수효과를 사용한다는 점이 이 단락의 핵심이라 할 수 있다.