JavaScript Map과 Object 비교: 어떤 것을 언제 사용할까?

작성일 :

JavaScript Map과 Object 비교: 어떤 것을 언제 사용할까?

JavaScript의 두 가지 주요 데이터 구조인 MapObject는 유사한 목적을 가지고 있지만, 서로 다른 특성을 지니고 있습니다. 이 글에서는 이 두 가지를 비교하고, 각각의 장단점을 살펴본 후, 언제 Map을 사용하고 언제 Object를 사용하는 것이 더 적합한지에 대해 알아보겠습니다.

Object: 전통적인 데이터 구조

JavaScript에서 가장 많이 사용되는 데이터 구조 중 하나인 Object는 키-값 쌍을 저장하는 비원시 데이터 타입입니다. 다음은 Object의 주요 특성과 사용 예입니다.

주요 특성

  • 키 타입: Object의 키는 문자열 또는 심볼만 가능합니다.
  • 데이터 순서: Object는 삽입 순서를 보장하지 않습니다. 하지만 최신 ECMAScript 표준에서는 문자열 키의 경우 삽입 순서가 보장됩니다.
  • 성능: 키-값 쌍의 추가 및 수정, 삭제가 상대적으로 빠릅니다.

사용 예

javascript
const person = {
  name: 'John',
  age: 30,
  job: 'Developer'
};

// 값 읽기
console.log(person.name); // John

// 값 추가
person.gender = 'male';

// 값 수정
person.age = 31;

// 값 삭제
delete person.job;

Object는 주로 간단한 데이터 저장과 접근에 사용됩니다. 그러나 이 데이터 구조는 키 타입의 제약과 데이터 순서 보장의 문제로 인해 특정 상황에서는 적합하지 않을 수 있습니다.

Map: 현대적인 데이터 구조

Map은 ECMAScript 6 (ES6)에서 도입된 자료형으로, 키-값 쌍을 저장하는 데 더 유연하고 강력한 기능을 제공합니다. 다음은 Map의 주요 특성과 사용 예입니다.

주요 특성

  • 키 타입: Map의 키는 객체를 포함한 모든 타입이 가능합니다.
  • 데이터 순서: Map은 삽입 순서를 정확히 보장합니다.
  • 성능: 데이터의 크기가 클 경우, MapObject보다 더 빠를 수 있습니다.

사용 예

javascript
const map = new Map();

// 값 추가
map.set('name', 'John');
map.set(1, 'one');
const objKey = { key: 'value' };
map.set(objKey, 'Object as key');

// 값 읽기
console.log(map.get('name')); // John
console.log(map.get(1)); // one
console.log(map.get(objKey)); // Object as key

// 값 수정
map.set('name', 'Doe');

// 값 삭제
map.delete(1);

Map은 다양한 타입의 키를 사용할 수 있으며, 삽입 순서를 유지하기 때문에 데이터를 순차적으로 다뤄야 하는 경우에 유용합니다.

Object와 Map의 장단점 비교

Object의 장점

  1. 간단함: 기본적으로 JavaScript에서 사용되고 있으며, 문법이 직관적입니다.
  2. 속도: 기본적으로 내부 구현이 최적화되어 있어, 작은 데이터셋에서 효율적입니다.
  3. 유연성: 기존 객체 리터럴 문법을 사용하므로, 선언과 초기화가 편리합니다.

Map의 장점

  1. 키의 다형성: 키로 객체를 포함한 모든 데이터를 사용할 수 있습니다.
  2. 순서 보장: 삽입된 순서를 유지하므로, 순차적인 데이터 처리에 유용합니다.
  3. 성능: 큰 데이터셋에서 Object보다 더 효율적일 수 있습니다.

Object의 단점

  1. 키 타입 제약: 키는 문자열이나 심볼만 가능합니다.
  2. 순서 불확실성: 키의 삽입 순서를 반드시 보장하지 않습니다.
  3. 충돌 가능성: 프로토타입 체인으로 인해, 예상치 못한 키 충돌이 발생할 수 있습니다.

Map의 단점

  1. 복잡성: Map의 메서드와 속성은 상대적으로 복잡해서 초기 학습 곡선이 있습니다.
  2. 무게: Object에 비해 초기화와 사용 시 메모리와 성능 오버헤드가 있을 수 있습니다.

언제 Map을 사용하고 언제 Object를 사용할까?

Object를 사용할 때

  1. 간단한 키-값 저장이 필요할 때
  2. 키가 문자열이나 심볼로 한정될 때
  3. 객체 리터럴 문법을 활용하고 싶을 때

Map을 사용할 때

  1. 키로 객체나 다른 비문자열 값을 사용할 때
  2. 데이터 삽입 순서를 유지해야 할 때
  3. 큰 데이터셋에서 성능을 최적화해야 할 때

결론

JavaScript에서 MapObject는 각기 다른 상황에서 유용하게 사용될 수 있는 데이터 구조입니다. Object는 간단하고 직관적인 사용이 가능하며, 작은 데이터셋을 다루기에 효율적입니다. 반면에 Map은 더 큰 유연성을 제공하며, 다양한 타입의 키를 사용할 수 있고, 데이터 삽입 순서를 보장합니다. 따라서 사용하려는 데이터의 형태와 요구 사항에 따라 적절한 데이터 구조를 선택하는 것이 중요합니다.