Map과 Set, 메모리는 얼마나 차이날까?

자바스크립트의 Map과 Set, 똑같이 데이터를 담는 자료구조지만 메모리 사용량은 생각보다 차이가 납니다. 어떤 상황에서 어떤 걸 써야 할까요?

JavaScriptMapSet메모리성능최적화
--

뭘 쓸지 고민될 때가 있죠

프로젝트를 하다 보면 데이터를 담을 때 Map을 쓸까 Set을 쓸까 고민될 때가 있어요. 기능적으로는 둘 다 잘 작동하는데, 성능이나 메모리 측면에서는 어떤 차이가 있는지 궁금하더라고요. 그래서 오늘은 Map과 Set의 메모리 사용량을 비교해볼까 합니다.

기본부터 짚고 넘어가기

Set은 중복 없는 값들의 집합이고, Map은 키-값 쌍을 저장하는 구조입니다. 이 차이가 메모리 사용에도 그대로 반영돼요.

Set에 숫자 3개를 담는다면?

const mySet = new Set([1, 2, 3]);

딱 세 개의 값만 메모리에 저장됩니다.

반면 Map에 같은 데이터를 담으려면?

const myMap = new Map([
  ["a", 1],
  ["b", 2],
  ["c", 3],
]);

키인 'a', 'b', 'c'와 값인 1, 2, 3을 모두 저장해야 해요. 단순 계산으로도 두 배의 데이터가 필요하다는 걸 알 수 있죠.

실제로 얼마나 차이날까?

단순 데이터 저장할 때

같은 개수의 데이터를 저장한다고 가정해볼게요.

// Set - 값만 저장
const numberSet = new Set([1, 2, 3, 4, 5]);

// Map - 키와 값 모두 저장
const numberMap = new Map([
  [1, "one"],
  [2, "two"],
  [3, "three"],
  [4, "four"],
  [5, "five"],
]);

Map은 Set이 저장하는 값에 더해 키까지 저장하니까, 단순히 생각해도 거의 두 배 가까운 메모리를 쓰게 됩니다. 키와 값의 타입에 따라 조금씩 다르겠지만, 기본적으로 두 종류의 데이터를 보관해야 하는 건 맞으니까요.

복잡한 객체를 다룰 때

객체나 배열 같은 복잡한 자료형을 저장하면 이야기가 좀 달라져요.

// Set에 객체 저장
const objectSet = new Set([
  { id: 1, name: "Alice" },
  { id: 2, name: "Bob" },
]);

// Map에 객체 저장
const objectMap = new Map([
  [{ id: 1 }, { name: "Alice" }],
  [{ id: 2 }, { name: "Bob" }],
]);

이 경우 Map은 키로 쓰이는 객체와 값으로 쓰이는 객체를 모두 메모리에 올려야 합니다. 게다가 자바스크립트 엔진은 내부적으로 키와 값을 연결하기 위한 추가 구조도 필요하고요. 이런 오버헤드까지 고려하면 메모리 차이는 더 벌어질 수 있어요.

그래서 뭘 써야 할까?

간단하게 정리하면 이렇습니다.

특징MapSet
저장 형식키-값 쌍값만
메모리 사용더 많음 (키 + 값)더 적음 (값만)
주요 용도데이터 조회, 관리중복 제거, 고유값 저장

결국 메모리 효율만 놓고 보면 Set이 유리합니다. 만약 키-값 매핑이 필요 없고 단순히 중복 없는 값들만 관리하면 된다면 Set을 쓰는 게 낫죠.

하지만 실무에서는 메모리만 보고 결정하진 않잖아요? 빠른 조회가 필요하거나 데이터를 키로 관리해야 한다면 당연히 Map을 써야 하고요. 중요한 건 각 자료구조의 특성을 이해하고 상황에 맞게 선택하는 거라고 생각합니다.

다음에는 실제 벤치마크 테스트 결과도 한번 공유해볼게요 😊

댓글

0/2000
Newsletter

이 글이 도움이 되셨나요?

새로운 글이 발행되면 이메일로 알려드립니다.

뉴스레터 구독하기