본문 바로가기
Node js

[Node.js] forEach 와 for of의 차이점

by 갈잃자 2024. 2. 28.

개요: db의 데이터를 순차적으로 변경하는 작업을 진행하는 중, 똑같은 로직이지만 forEach문은 안되고 for of 문은 되는 경우가 발생했다.


forEach와 for of 의 차이점

 

1. 호출 스택과 콜백 함수 오버헤드

- forEach: 콜백 함수를 인자로 받아 각 요소에 대해 실행시긴다. 각 요소마다 함수를 호출하므로, 함수 호출의 오버헤드가 발생할 수 있다. (대량의 db 데이터를 변경하는 작업을 진행하면, 오버헤드 때문에 메모리 에러가 날 우려가 있음.)

 

- for of: 반복하는 동안 함수 호출이 발생하지 않는다. 따라서 함수 호출 오버헤드가 발생하지 않는다.

    - 오버헤드란?: 오버헤드는 어떤 프로세스를 실행하는 데 필요한 추가적인 비용이나 부담을 얘기한다. 주로 시스템 리소스(시간, 메모리, 프로세서등)를 소비하는 부가적인 작업을 말한다.

 

2. 반복 가능한 객체의 종류

 

- forEach: 배열(array)에 대해서만 사용할 수 있다.

 

- for of: 반복 가능한(iterable) 객체에 모두 사용할 수 있다.

 

3. 중단 가능 여부

 

- forEach: forEach는 루프를 중단할 수 없다. 중단을 원한다면 내부 함수에 return문을 사용해야 함

 

- for of: for or는 루프를 중단할 수 있다. 'break'문을 이용


여기서 강조하고 싶은 부분은 1번 (호출 스택과 콜백 함수 오버헤드)인데, 큰 데이터를 가진 db를 순차적으로 변경하는 작업은 그만큼 리소스에 추가적인 비용과 부담이 많이 들고, 그로 인해  리소스 에러가 나타났다. 이를 해결하 기 위한 작업으로 forEach문을 for of 로 변경하여, 에러를 없애고 작업을 진행 할 수 있었다.

댓글