Enjoy Programming

[ES6] Set && weakSet 본문

JavaScript/Vanilla Js

[ES6] Set && weakSet

LEETAEEON 2021. 7. 6. 11:33

이번에는 Set 에 알아보자. 역시 mdn 부터

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Set

 

Set - JavaScript | MDN

Set 객체는 자료형에 관계 없이 원시 값과 객체 참조 모두 유일한 값을 저장할 수 있습니다.

developer.mozilla.org

 

set은 객체이다. set 객체는 자료형에 관계없이 원시 값과 객체 참조 모두 유일한 값을 저장할 수 있다.

매개변수로는 iterable한 객체가 전달된 경우, 그 요소는 모두 새로운 set에 추가된다. 만약 매개변수를 명시하지 않거나

null 을 전달하면 , 새로운 set은 비어있는 상태가 된다.

return 값은 새로운 Set객체

Set 객체는 value 콜렉션으로, 삽입 순서대로 요소를 순회할

수 있다. 하나의 Set 내 값은 한 번만 나타날 수 있다.

즉, 어떤 값은 그 Set 콜렉션 내에서 유일하다.

예제를 만들어보면

이렇다 . 하나의 Set을 생성하나는데 매개변수로 iterable한 배열을 넣었고 배열의 값에는 중복되는 값들이있다.

이렇게 하나의 셋을 만들고 console을 보고면

각값들을 순회하여 중복되는 값을 제거하고 unique한 값들만 Set object에 담아서 return되었다.

 

 

Set은 여러가지 API..음 메서드를 갖고 있는데 아주 유용하다~

몇 개만 써보면~

이렇다~~ 추가도 되고 , value를 지울 수도 있고~ 전부 클리어해줄 수도 있고~ 여러가지를 해줄 수 있다.

mdn에 보면 잘 정리 되어있다~

 

==============================================================================

 

WeakSet

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/WeakSet

 

WeakSet - JavaScript | MDN

WeakSet 객체는 약하게 유지되는(held, 잡아두는) 객체를 컬렉션에 저장할 수 있습니다.

developer.mozilla.org

weakSet객체는 약하게 유지되는(held, 잡아두는) 객체를 컬렉션에 저장할 수 있다.

매개변수로는 iterable 객체가 전달된 경우, 모든 객체 요소는 새로운 WeakSet에 추가된다. null은 undefined로 취급

- weakSet객체는 객체 컬렉션이다. weakSet 내 객체는 오직 한 번만 발생할 수 있다~

weakSet 컬렉션내에서 유일하다!

 

set과의 주된 차이는

1. set과 달리, weakSet은 객체만의 컬렉션이며 모든 유형의 임의 값은 아니다.

2. weakSet은 글자 그대로 weak하다. 컬렉션 내 객체 참조는 약하게 유지된다. weakSet 내 저장된 객체에 다른 참조가 없는 경우, 쓰레기 수집이 될 수 있다. 이는 또한 컬렉션 내 현재 저장된 객체 목록이 없음을 뜻한다. WeakSets은 열거 불가이다!

 

WeakSet은 오브젝트만 컬렉션으로 가질 수 있다. 예를들어 숫자를 넣으려고하면

타입 에러가 발생하게 된다.  

이렇게 오브젝트의 형태로 넣어주면 entry에 구성된다. 주의 할점은~

WeakSet의 안쪽에서 object를 생성해서 추가를 해주면

WeakSet을 출력시 나오지 않는다.  garbage collection으로 취급해 제거를 해버린것이다.

weakSet바깥쪽에 어떤것도 해당 object를 메모리로 관리하고 있지 않기에 WeakSet이 자체적으로 필요없는 데이터라 생각해서 없애버린것이다. 좀 복잡한 내용이긴한데 .. C를 잠시 공부할때 접해보긴했다.

자바스크립트나 다른 highlevel 언어와 다르게 c같은 low-level언어는 메모리관리가 매우 중요하다.

변수를 선언하고 값이 주어지고 사용하고나면 해당 메모리를 비워줘야 한다. 그래야 메모리 누수가 없다.

음 복잡해진다... 일단 아무튼 WeakSet내의 컬렉션이 바깥에서 어떠한것도 가리키지 않는다면 쓰레기로 생각해 없애버린다고 생각하자.

 

'JavaScript > Vanilla Js' 카테고리의 다른 글

[ES6] generator  (0) 2021.07.06
[ES6] MAP && Weak Map  (0) 2021.07.06
[ES6] Symbol  (0) 2021.07.02
webAssemply 2  (0) 2021.06.25
WebAssembly  (0) 2021.06.25