Here's my dents in the universe

Javascript Map과 Object의 차이점은?


Intro.

회사에서 간단한 로직을 작성하는 중이었다. map 안에 map이 들어있는 nested map형태의 데이터를 순회하며 가장 하위에 있는 number[]  타입의 값을 가져와야하는 일이었다.

JS가 제공하는 forEach, map 등의 함수를 사용하는 중에, 문득 몇 가지 궁금증이 생겼다.  map은 forEach 함수를 써서 iterate할 수 있지만, object는 불가능하다. 그렇기 때문에 object.keys()for...in과 같은 우회적인 방법을 통해 iterate 동작을 수행하곤 한다.

Map이나 object나 비슷해 보이는데, 왜 하나는 되고 하나는 안 되는걸까? 또 Map과 object는 어떻게 다르길래, JS 설계자들은 굳이 map이라는 자료구조를 새로 만들어야 했을까?

이런 경우 MDN이 제공하는 문서를 꼼꼼히 읽어보는 것이 정답이지만, 클라이언트 단에서 코드 완성을 기다리고 있었기 때문에, 일단은 빠르게 코드 완성/디플로이하고 퇴근 이후에 차분히 읽어보고 정리하기로 한다.

Map vs. Object

Map - JavaScript | MDN

실제로도 Object와 map은 비슷한 구석이 많았다. 둘 다 key, value 쌍을 저장할 수 있고, key값으로 value를 받아올 수 있고, key값을 삭제할 수 있고, key값에 value가 저장되어 있는지 여부를 알 수 있다. 실제로 map이 구현되기 이전까지는 object가 map의 역할을 수행했다고 한다.

그런데 둘 사이에는 분명 차이가 있다. mdn이 제공하는 예시를 살펴보면서 둘 사이의 차이점을 알아보도록 하자.

Accidental keys.

Key types

Key order

Size

Iteration

Performance

Serialization and parsing

Map에 관해 몰랐던 사실