Map 과 Set을 이해하기전 객체와 배열에 대한 이해가 필요합니다.
객체 : 키가 있는 컬렉션을 저장합니다.
배열 : 순서가 있는 컬렉션을 저장합니다.
하지만 기능이 부족하여 Map 과 Set을 사용하게됐습니다.
키가 있는 데이터를 저장한다는 점에서 객체와 유사합니다. 하지만 Map은 키에 다양한 자료형을 허용합니다.
ex) Map 사용 예시
let map = new Map();
map.set('1', 'str1');
map.set(1, 'num1');
map.set(true, 'bool1');
console.log(map.get(1)); // 'num1' 출력
console.log(map.get('1'); // 'str1' 출력
console.log(map.size); // 3
map을 사용할 때는 키값을 설정하고 불러올 때 set, get 만 사용하는 것이 좋습니다.
ex)
let drinkMap = new Map([
['Soju', 5000],
['Beer', 4000],
['Water', 1000],
]);
for(let drink of drinkMap.key()){
console.log(drink); // Soju, Beer, Water 출력
};
for(let price of drinkMap.values()){
console.log(price); // 5000, 4000, 1000 출력
}
for(let menu of drinkMap){
console.log(menu);
} // Soju, 5000, Beer, 4000, Water, 1000 출력
맵은 값이 삽입된 순서를 기억하고 순서대로 실시합니다.
let obj = {
name: "KJ",
age: 31
};
let map = new Map(Object.entries(obj));
console.log(map.get('name')); // KJ 출력
Object.entries를 사용해 객체 obj를 배열로 바꾸고, 이 배열을 이요해 새로운 맵을 만들 수 있습니다.
위와 상반된 개념입니다.
let prices = Object.fromEntries([
['Soju', 1],
['Beer', 2],
['Water', 4]
]);
console.log(prices.Soju); // 1출력
Set은 중복을 허용하지 않는 값을 모아놓은 특별한 컬렉션입니다. 셋은 키가 없는 값이 저장됩니다.
set.add(value) 사용시 동일한 값이 있다면 아무 반응이 없습니다.
중복값을 허용하지 않는 상황에서는 Set을 사용합니다.
let set = new Set();
let KJ = {name: "KJ"};
let SJ = {name: "SJ"};
let SH = {name: "SH"};
set.add(KJ);
set.add(SJ);
set.add(SH);
set.add(SY);
set.add(KO);
console.log(set.size); // 3 (SY와 KO는 별도 선언이 없어 추가가 안된다.);
for(let user of set){
console.log(user.name);
// KJ, SJ, SH 출력
}
Set의 장점은 유일하다.(Unique)입니다. 중복값이 있을까 걱정할 필요가 없습니다.
for...of 나 forEach를 사용하면 Set값을 반복할 수 있습니다.
ex)for...of
let set = new Set(['KJ', 'SJ', 'ET']);
for(let value of set);
console.log(value);
ex) forEach
let set = new Set(['KJ', 'SJ', 'ET']);
set.forEach((value, valueAgain, set) => {
console.log(value);
});
훑어본 결과.. 무슨 말인지 모르겠으니까, 나중에 다시 한 번 정리하자.