JS - Colletions

김종민·2023년 3월 30일
0

면접을 보던 중 , JavaScript의 colletions에 관한 질문을 듣고 당황한 기억이 있다.
colletions이란 용어가 어떤 개념인지 몰라서 당황하여 해당 개념을 다시 정리해본다.

우선 Colletion이란 여러 원소들을 담을 수 있는 자료구조를 뜻한다.
JavaScript의 Colletion으로 ES5 이전에는 Object와 Array만 있었지만,
ES6 부터는 Map, WeakMap, Set, WeakSet, Typed Array가 추가되었다.

Map

Map은 Key - value 의 쌍으로 이루어져있다.

객체와의 차이점
1. 객체와는 다르게 Key는 문자열이 아닌 다른 형태도 지정이 가능하다.
2. 객체는 크기를 수동으로 추적하지만 Map은 size메서드를 통해 쉽게 얻을 수 있다.

mdn 문서에 따르면 모든 Key & Value가 동일한 type인 경우에는 객체대신 Map사용을 추천하며,
각각의 요소마다 적용할 로직이 있는 경우에는 객체사용을 추천한다.

const map = new Map()
map.set("1",1)
map.set(2,2)

const map2 = new Map([["1",1],[2,2]])

Set

Set은 쉽게 설명하면 중복값이 없는 배열이다.

const set = new Set()
set.add(1)
set.add("ggggg")
set.add(1)

set.size; // 2

공식문서 URL

WeakMap & WeakSet

Map과 Set을 구성하는 요소는 Map과 Set이 메모리에 존재한다면, 해당 요소는 가비지컬렉션으로 이동하지 않는다. 이러한 메모리 비효율성 때문에 WeakMap과 WeakSet이 등장하였다.

let test = {name:"test"}

const array = [test]

test = null;

//test를 null로 선언하여 가비지컬렉션으로 이동시키려고 했지만, array에 포함되어 있으므로 메모리에 남아있는다.

WeakMap

WeakMap은 Map과 달리 Key는 무조건 객체여아한다. 만약 Key로 참조하고 있는 객체가 없다면 메모리와 WeakMap에서 삭제된다.

let test = {name:"test"}

const map = new WeakMap()
map.set(test,"HI")

test = null;

WeakSet

WeakSet은 WeakMap과 유사하게 객체만 저장이 가능하다.

profile
개발을 합시다 :)

0개의 댓글