[js] Map vs. Object 차이

정혜인·2024년 8월 8일
0

javascript

목록 보기
6/9

💨 Map vs. Object 차이

⭕ 1. 키 타입

  • Object: 키는 문자열이나 심볼(Symbol)만 가능. 숫자형 키를 사용할 경우, 자동으로 문자열로 변환
    const obj = {};
    obj['key'] = 'value';   // 키는 문자열
    obj[42] = 'value';      // 키는 자동으로 '42'로 변환
    obj[{}] = 'value';      // 키는 '[object Object]'로 변환
  • Map: 키는 문자열, 숫자, 객체 등 어떤 타입도 가능
    const map = new Map();
    map.set('key', 'value');    // 키는 문자열
    map.set(42, 'value');       // 키는 숫자
    map.set({}, 'value');       // 키는 객체

⭕ 2. 키의 순서

  • Object: 키의 순서는 삽입 순서가 보장되지 않으며, 키가 문자열인 경우 삽입된 순서와 관계없이 정렬 가능
    const obj = {};
    obj['b'] = 1;
    obj['a'] = 2;
    console.log(Object.keys(obj));  // ['b', 'a']
  • Map: 삽입된 순서대로 키가 유지
    const map = new Map();
    map.set('b', 1);
    map.set('a', 2);
    console.log([...map.keys()]);  // ['b', 'a']

⭕ 3. 크기 계산

  • Object: 크기를 계산하기 위해서는 키의 개수를 직접 세야 함
    const obj = { 'a': 1, 'b': 2 };
    console.log(Object.keys(obj).length);  // 2
  • Map: size 프로퍼티로 크기를 바로 알 수 있음
    const map = new Map();
    map.set('a', 1);
    map.set('b', 2);
    console.log(map.size);  // 2

⭕ 4. 성능

  • Object: 객체는 구조적으로 키-값 저장에 최적화 X, 일반적인 속성 접근 및 설정에는 충분하지만, 빈번한 추가/삭제 작업에서는 성능이 저하 O
  • Map: 대규모 데이터 저장 및 빈번한 키-값 추가/삭제 작업에 최적화

⭕ 5. 기본 프로토타입

  • Object: 기본적으로 Object.prototype을 상속받아 많은 기본 메서드와 속성을 가지고 있음. 이러한 기본 속성들은 키로 사용할 때 예기치 않은 동작을 일으킬 수 있음
    const obj = {};
    obj['toString'] = 'value';
    console.log(obj['toString']);  // 'value'
  • Map: 기본 프로토타입을 상속받지 않으며, 키로 사용되는 값에 대해 예기치 않은 동작이 발생하지 않음
    const map = new Map();
    map.set('toString', 'value');
    console.log(map.get('toString'));  // 'value'

⭕ 6. 반복

  • Object: for...in 구문이나 Object.keys(), Object.values(), Object.entries()를 사용하여 반복해야 함
    const obj = { 'a': 1, 'b': 2 };
    for (let key in obj) {
        console.log(key, obj[key]);
    }
  • Map: for...of 구문을 사용하거나, keys(), values(), entries() 메서드를 사용하여 반복할 수 있음
    const map = new Map();
    map.set('a', 1);
    map.set('b', 2);
    for (let [key, value] of map) {
        console.log(key, value);
    }

⭕ 정리

항목ObjectMap
키 타입문자열, 심볼만 가능모든 타입 가능 (문자열, 숫자, 객체 등)
키 순서보장되지 않음삽입 순서 유지
크기 계산Object.keys(obj).length로 계산 필요size 프로퍼티 사용
성능일반 속성 접근에 최적화대규모 데이터 및 빈번한 추가/삭제에 최적화
기본 프로토타입Object.prototype 상속, 기본 메서드 존재기본 프로토타입 상속 없음
반복for...in, Object.keys(), Object.values(), Object.entries() 사용for...of, keys(), values(), entries() 사용
사용 예일반적인 객체 리터럴, JSON 데이터복잡한 키-값 저장, 빈번한 데이터 변경

⭕ 요약

  • Object: 문자열, 심볼 키에 최적화된 전통적인 키-값 저장 방식.
  • Map: 다양한 타입의 키를 지원하고, 데이터 추가/삭제가 빈번한 경우에 적합한 현대적인 키-값 저장 방식.

0개의 댓글

관련 채용 정보