
const obj = {};
obj['key'] = 'value'; // 키는 문자열
obj[42] = 'value'; // 키는 자동으로 '42'로 변환
obj[{}] = 'value'; // 키는 '[object Object]'로 변환const map = new Map();
map.set('key', 'value'); // 키는 문자열
map.set(42, 'value'); // 키는 숫자
map.set({}, 'value'); // 키는 객체const obj = {};
obj['b'] = 1;
obj['a'] = 2;
console.log(Object.keys(obj)); // ['b', 'a']const map = new Map();
map.set('b', 1);
map.set('a', 2);
console.log([...map.keys()]); // ['b', 'a']const obj = { 'a': 1, 'b': 2 };
console.log(Object.keys(obj).length); // 2size 프로퍼티로 크기를 바로 알 수 있음const map = new Map();
map.set('a', 1);
map.set('b', 2);
console.log(map.size); // 2Object.prototype을 상속받아 많은 기본 메서드와 속성을 가지고 있음. 이러한 기본 속성들은 키로 사용할 때 예기치 않은 동작을 일으킬 수 있음const obj = {};
obj['toString'] = 'value';
console.log(obj['toString']); // 'value'const map = new Map();
map.set('toString', 'value');
console.log(map.get('toString')); // 'value'for...in 구문이나 Object.keys(), Object.values(), Object.entries()를 사용하여 반복해야 함const obj = { 'a': 1, 'b': 2 };
for (let key in obj) {
console.log(key, obj[key]);
}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);
}| 항목 | Object | Map |
|---|---|---|
| 키 타입 | 문자열, 심볼만 가능 | 모든 타입 가능 (문자열, 숫자, 객체 등) |
| 키 순서 | 보장되지 않음 | 삽입 순서 유지 |
| 크기 계산 | Object.keys(obj).length로 계산 필요 | size 프로퍼티 사용 |
| 성능 | 일반 속성 접근에 최적화 | 대규모 데이터 및 빈번한 추가/삭제에 최적화 |
| 기본 프로토타입 | Object.prototype 상속, 기본 메서드 존재 | 기본 프로토타입 상속 없음 |
| 반복 | for...in, Object.keys(), Object.values(), Object.entries() 사용 | for...of, keys(), values(), entries() 사용 |
| 사용 예 | 일반적인 객체 리터럴, JSON 데이터 | 복잡한 키-값 저장, 빈번한 데이터 변경 |
Object: 문자열, 심볼 키에 최적화된 전통적인 키-값 저장 방식.Map: 다양한 타입의 키를 지원하고, 데이터 추가/삭제가 빈번한 경우에 적합한 현대적인 키-값 저장 방식.