Map
Map 객체는 Key-Value 쌍인 집합.
Map의 특징
- 하나의 Map 에서 Key는 오직 단 하나만 존재한다. => Map 집합의 유일성
- Map 객체는 Key-Value 쌍으로 반복된다. `for...of` 루프는 각 반복에 대해 `[key, value]`로 이루어진 멤버가 2개인 배열을 반환한다.
- 반복은 삽입한 순서대로 발생한다. 즉, `set()` 메서드로 Map에 처음 삽입한 각각의 Key-Value 쌍 순서와 대응된다는 말이다.
- Map의 Key로 다양한 자료구조를 정의할 수 있다.
Map의 메서드
set
- Map에 데이터를 추가할 때 사용.
- Map 객체를 반환함.
let student = new Map();
// set : Map 객체에 삽입
student.set("id", 39);
student.set("name", "Kim");
student.set("grade", 85);
console.log(student);
// 출력 : Map(3) { 'id' => 39, 'name' => 'Kim', 'grade' => 85 }
get
주어진 Key에 해당하는 값을 반환하거나 값이 없다면 `undefined`를 반환.
let student = new Map();
student.set("id", 39);
student.set("name", "Kim");
student.set("grade", 85);
console.log(student.get("id"));
// 출력 : 39
console.log(student.get("rank"));
// 출력 : undefined
has
주어진 키에 연관된 값이 Map 객체에 존재하는지 여부를 `true`/`false`로 반환.
let student = new Map();
student.set("id", 39);
student.set("name", "Kim");
student.set("grade", 85);
console.log(student.has("id"));
// 출력 : true
console.log(student.has("rank"));
// 출력 : false
delete
주어진 키에 해당하는 값을 Map 객체에서 삭제. 만약 주어진 키가 존재하여 삭제했을 때는 `true`, 존재하지 않는 경우에는 `false`를 반환.
let student = new Map();
student.set("id", 39);
student.set("name", "Kim");
student.set("grade", 85);
console.log(student.delete("grade"));
// 출력 : true
console.log(student.delete("Kim"));
// 출력 : false
console.log(student);
// 출력 : Map(2) { 'id' => 39, 'name' => 'Kim' }
clear
Map 객체의 모든 Key-Value 쌍을 제거.
let student = new Map();
student.set("id", 39);
student.set("name", "Kim");
student.set("grade", 85);
student.clear();
console.log(student);
// 출력 : Map(0) {}
객체(Object) vs Map
Map은 Object와 비슷하다. 둘 다 값을 가리키는 키를 설정하고, 해당 값을 받아오고, 키를 삭제하며, 키에 무언가가 저장되었는지 여부를 알 수 있다. Map 자료구조가 추가된 ECMA Script 6+ 이전에는 이러한 역할로 Object를 사용해왔다.
그렇다면 Map이 Object보다 유리한 점은 무엇이 있을까?
성능
Map 객체는 키 컬렉션이 있는 객체의 한 종류로서, 객체의 속성(Property)를 자주 변경(추가/제거)해야할 때 유리하다.
순회 가능
Map은 반복자(Iterator)를 통해서 직접 순회할 수 있다. Object는 iteration.protocol을 구현하지 않기 때문에 `for ...of`문을 사용하여 직접 순회할 수 없다.
크기
Map의 아이템 수는 size 속성에서 쉽게 갖고 올 수 있는 반면, Object의 아이템 수는 수동으로 구해야 한다.
키 유형
Map의 키는 모든 값(함수, 객체 또는 원시값 포함)이 될 수 있지만, Object의 키는 String 또는 Symbol이어야 한다.
[참고]
'Language > Javascript·Typescript' 카테고리의 다른 글
[Javascript/자바스크립트] 자바스크립트 내부 동작을 시각적으로 보여주는 사이트 (0) | 2024.08.01 |
---|---|
객체지향 프로그래밍 (0) | 2024.07.27 |
[Javascript/자바스크립트] slice와 splice (0) | 2024.06.23 |
[Javascript/자바스크립트] 진수 변환 (0) | 2024.06.22 |
[Javascript/자바스크립트] 배열 정렬 (0) | 2024.06.22 |