map은 돌지 않는다.

jw3215·2023년 11월 30일

js의 Array 메서드인 map. 보조함수를 인자로 받아서 새로운 배열을 만드는 메서드다. 보조함수에서 console.log로 값을 출력하면 원소의 순서대로 콘솔에 찍히기 때문에, for문 처럼 배열을 순회하는 것으로 이해하는 것이 자연스럽다. 하지만 나는 이건 implemetation detail일 뿐이라고 생각한다. 보조함수가 순차적으로 실행되건, 거꾸로 실행되건, 무작위로 실행되더라도 프로그램 동작에는 차이가 없어야 한다고 보는데, map 메서드의 책임은 어떤 배열에서 새로운 배열을 만드는 것이 전부기 때문이다. 즉 map 메서드의 보조함수는 순수함수여야 하고, 순차적으로 실행되길 기대하는 부수효과가 있다면 forEach 메서드를 쓰는 것이 맞다.


25년 12월 수정

경력이 쌓이면서 언어명세를 보는 일이 몇 번 생겼고, 이제와서 보니 좀 부끄럽다. tc39 명세의 첫 문장에 정확하게 쓰여져있다. "순서대로 호출해라"

callback should be a function that accepts three arguments. map calls callback once for each element in the array, in ascending order, and constructs a new Array from the results.

소프트웨어 개발은 약속의 집합이다.

0개의 댓글