Map 객체는 key-value로 이루어진 데이터 구조이다.
Map에 key-value는 모든 타입에 대해서 사용 가능하다.
const map1 = new Map();
map1.set('a', 1);
map1.set('b', 2);
map1.set(1, 3);
console.log(map1.get('a'));
// Expected output: 1
console.log(map1.get('b'));
// Expected output: 2
console.log(map1.get(1));
// Expected output: 3
Map은 한 객체 내에서 key는 오직 단 하나만 존재해야 한다.
ex) { 'a': 1, 'a': 2 } → X
Map 객체는 for .. of 구문을 사용하여 내부 요소를 참조할 수 있다.
const map = new Map();
map.set('a', 1);
map.set('b', 2);
map.set('c', 3);
for(var m of map) {
console.log(m);
// 첫번째 ['a', 1]
// 두번째 ['b', 2]
// 세번째 ['c', 3]
}
for .. of 구문을 사용할 경우, 각 순회마다
key와 value를 크기가 2인 Array로 반환해준다.
Object와 Map의 차이
Object는 Map과 매우 유사하다. 둘 다 key-value 형태이기 때문이다. 예전 Map객체가 없었을 시절엔
Object를 Map으로도 사용하였다.
대표적인 차이를 보자.
1. 키 유형
Map은 모든 타입을 key 타입으로 설정할 수 있는 반면에, Object의 경우, String 또는 Symbol이여야 한다.
2. 순회
Map은 iterable 구조이기 때문에 직접 반복할 수 있는 반면에, Object의 경우 for ... of 구문을 사용하여
직접 순회가 불가능하다.
3. 성능
Map은 key-valu 추가 및 제거 관련 상황에서 성능이 더 최적화 되어있다.
4. 직렬화 및 역직렬화
Map의 경우 직렬화 또는 역직렬화에 대한 기본 지원이 없다.
Object의 경우 JSON.stringify(..)를 사용하여
Object → JSON으로 직렬화 및 JSON → 역직렬화가 가능하다.
key-value 설정하기
Object의 key-value 설정
const obj = {};
obj['a'] = 1;
이런 식으로 key-value를 동적 추가가 가능하다
그러나 Map 객체에서 key-value를 이렇게 추가하는 경우,
const wrongMap = new Map();
wrongMap["bla"] = "blaa";
wrongMap["bla2"] = "blaaa2";
console.log(wrongMap); // Map { bla: 'blaa', bla2: 'blaaa2' }
wrongMap.has("bla"); // false
wrongMap.delete("bla"); // false
console.log(wrongMap); // Map { bla: 'blaa', bla2: 'blaaa2' }
내장 메서드를 사용했을 때, key를 제대로 인식하지 못하는 경우가 발생한다.
따라서 Map 객체에서 key-value를 추가할 때는 Map.set()을 사용하는 것을 권장한다!
'Programming > JavaScript' 카테고리의 다른 글
String 객체 살펴보기 (2) | 2024.03.01 |
---|---|
Array 객체 살펴보기 (0) | 2024.02.19 |
일치 연산자(Strict equality operators) (0) | 2024.02.17 |
Base64를 Blob 또는 File 객체로 변환하기 (0) | 2024.01.25 |