1-1 데이터 타입의 종류🚨


자바스크립트의 데이터 타입.png

기본형과 참조형의 차이

기본형은 할당이나 연산시 복제되고 참조형은 참조된다. 즉, 기본형은 불변성을 띈다.

불변성이 정확히 무엇인지에 대해서는 이번 장에서 자세히 살펴볼 예정이다.

🚨잠깐! 짚고 넘어갈 것

WeakMap이랑 WeakSet에 대해서 알아보자. (1장을 모두 읽고 보는 것을 추천)
참고 글

WeakMap과 일반 Map의 차이점

자바스크립트의 가비지 컬렉션은 참조하는 대상이 하나도 없거나 추후 사용될 가능성이 없는 값을 메모리에서 삭제한다. 아래 코드는 그 예시이다.

let sumin = { name: "Sumin" };

sumin = null;

sumin변수에 null을 할당하는 순간{ name: "Sumin" }객체는 참조하는 변수가 하나도 없기 때문에 가비지 컬렉션의 대상이 되고 메모리에서 삭제된다. 하지만 객체가 배열 안에 있거나 맵이나 셋의 구성요소가 된다면 도달 가능한 값으로 취급되어 가비지컬렉션의 대상이 되지 않고 메모리에 유지된다. 아래 예시를 통해 살펴보자

let sumin = { name: "Sumin" };
let map = new Map();
map.set(sumin, '...');



for (let obj of map.keys()){
    console.log(obj); //{ name: "Sumin" }
}

위의 경우 sumin 변수에 담겨있던 객체가 map의 key값이 되었기 때문에 sumin = null가 실행되어도 객체는 가비지 컬렉션의 대상이 되지 않는다. 하지만 WeakMap을 사용하면 키로 쓰인 객체도 가비지 컬렉션의 대상이 된다.

위크맵

const weakMap = new WeakMap();
const obj = {};

weakMap.set(obj, "ok");

//기본형 데이터는 위크맵의 키가 될 수 없다.
weakMap.set("test", "No"); //// Error: Invalid value used as weak map key

위크맵의 키로 사용된 객체는 객체를 참조하는 것이 아무것도 없으면 메모리와 워크맵에서 자동으로 삭제된다.

let sumin = { name: "Sumin" };
let map = new Map();
map.set(sumin, '...');

sumin = null;

위 코드가 실행되고 나면 sumin변수 안에 담겨있던 객체는 가비지 컬렉션의 대상이 되고 메모리에서 지워진다.

위크맵은 언제 사용하는 것이 좋을까?

위크맵은 부차적인 데이터를 저장할 때 유용하다.
아래와 같은 상황에서 사용할 수 있다.

weakMap.set(john, "비밀문서");
// john이 사망하면, 비밀문서는 자동으로 파기됩니다.

results matching ""

    No results matching ""