본문 바로가기

Programming/Node.js

2. Javascript ES2015 (8) - Map/Set

node js logo image

 

 

 

 

ES2015에서 추가된 새로운 자료구조들 중, 자주 사용될만한 것은 Map, 그리고 Set입니다. 이미 JAVA에서도 Map과 Set을 다룬 적이 있기 때문에, 기본적인 개념은 각각의 아티클을 참고하는 것도 좋을 것 같습니다. 

 

 

 

 

컬렉션 프레임워크(4) - Map 컬렉션 1 : Map의 개념[1/2]

이번에는 Map 컬렉션에 대해서 살펴보겠습니다. Map 컬렉션은 키(key)와 값(value)으로 구성된 Entry 객체를 저장하는 구조입니다. 중요한 특성 중 하나는, key는 중복 저장할 수 없으며 value는 중복 저

nozeroslope.tistory.com

 

 

 

컬렉션 프레임워크(3) - Set 컬렉션 1 : Set의 개념

List와 차별화되는 Set 컬렉션의 가장 큰 특징은, 수학의 집합과 유사한 성질을 갖는다는 것입니다. 기본적으로 Set 컬렉션은 인덱스가 사용되는 List와 달리 (1) 순서가 없고, (2) 중복이 허용되지 않

nozeroslope.tistory.com

 

 

기본적인 개념만 다시 짚어보자면, Map은 K, V 기반의 객체와 유사한 형태이고, Set은 배열과 유사한데 집합의 속성을 갖는 구조라고 생각하면 되겠습니다. 다만 디테일한 속성은 JAVA와 약간의 차이가 있으니, 상세한 특성은 개별적으로 학습하도록 하겠습니다.

 

 

 


 

 

○ Map

 

Map은 기본적으로 속성들 간의 순서를 보장하고, size를 통해서 속성의 수도 파악이 가능합니다. 속성명은 문자열이 아닌 값도 사용할 수 있습니다. 객체이기는 하지만, 일반적인 객체와 특징이 약간 다른 것을 알 수 있습니다. 

 

const m = new Map();

// set(k,v)로 속성 추가
m.set('a', 'b');
// 스트링이 아닌 값을 key로 사용
m.set(3, 'c');
const d = {};
// 객체도 key로 사용 가능
m.set(d, 'e');

console.log(m.get(d));
console.log(m.size);
console.log(m.has(d));

for(const [k, v] of m){
    console.log(k, v);
}

m.forEach((v, k) => {
    console.log(k, v);
});

m.delete(d);
m.clear();
console.log(m.size);

/* 출력
e
3
true
a b
3 c
{} e
a b
3 c
{} e
0
*/

 

 

 

○ Set

 

Set은 중복이 허용되지 않는다는 점이 가장 큰 특징입니다. 즉, 이 속성을 사용하게 되면 '배열을 사용하되 중복은 허용하고 싶지 않을 때' 사용할 수 있다는 결론이 나옵니다. 또는, 어떤 배열에서 역으로 '중복을 제거하고 싶을 때'도 사용할 수 있습니다. 

 

 

const arr = [1, 3, 2, 7, 2, 6, 3, 5];

const s = new Set(arr);
const result = Array.from(s);
console.log(result);

/* 출력
(6) [1, 3, 2, 7, 6, 5]
*/

 

 

우선 중복된 3이 삭제되는 시점은, new Set(arr)이 실행되는 시점입니다. 또한, 어떠한 Set 타입을 배열로 되돌리는 방법은 예제에서처럼 Array.from(Set)을 실행하는 것입니다.