WeakSet 오브젝트 -ECMAScript
value
로 오브젝트만 사용하는 WeakSet
개요
WeakSet
오브젝트는 value
로 오브젝트만 사용할 수 있으며, string
, number
, symbol
과 같은 값을 사용할 수 없습니다. key
는 사용하지 않습니다.
WeakMap
인스턴스와 마찬가지로 GC
(Garbage Collection)가 발생하면 WeakSet
인스턴스의 value
가 삭제됩니다.
WeakMap 오브젝트는 key가 기준이고 WeakSet 오브젝트는 value가 기준입니다.
new WeakSet(): WeakSet 인스턴스 생성
WeakSet
인스턴스를 생성하여 반환합니다.
new WeakSet()
- 파라미터는 선택으로 이터러블 오브젝트를 작성하고, 그 안에 오브젝트를 지정합니다.
지정한 오브젝트가 value에 설정됩니다.
1 | 1. let newString = new String("문자열"); |
String
인스턴스와Number
인스턴스를 생성합니다.WeakSet
인스턴스를 생성하면서 파라미터에 이터러블 오브젝트를 작성하고, 그 안에String
인스턴스와Number
인스턴스를 지정합니다.
각 인스턴스의 메모리 주소가WeakSet
인스턴스의value
로 설정됩니다.
- newWeakSet() 파라미터에 문자열(“ABC”) 또는 숫자(345)를 작성하면 에러가 발생합니다.
Object, Function과 같은 오브젝트만 지정할 수 있습니다.
add(): value 추가
WeakSet
인스턴스에 value
를 추가합니다.
WeakSet.prototype.add()
파라미터에 value로 설정될 오브젝트를 지정합니다. Object, Function과 같은 오브젝트를 지정할 수 있습니다.string, number, boolean, null, undefined, symbol을 작성하면 에러가 발생합니다.
1 | const newWeakSet = new WeakSet(); |
- has() 파라미터에 지정한 newString 인스턴스가 newWeakSet 인스턴스의 value에 있으므로 true를 반환합니다.
delete(): 엘리먼트 삭제
WeakSet
인스턴스에서 value
가 같은 엘리먼트를 삭제합니다.
WeakSet.prototype.delete()
- 파라미터에 WeakSet 인스턴스에서 삭제할 오브젝트를 지정합니다. 오브젝트가 존재하면 value를 삭제하고 true를 반환합니다. 존재하지 않으면 false를 반환합니다.
1 | let newString = new String("문자열"); |
- new String()으로 인스턴스를 생성하여 newWeakSet 인스턴스에 추가한 상태입니다.
delete() 파라미터에 newWeakSet 인스턴스에 존재하는 newString 인스턴스를 지정해 줬으므로 삭제하고 true를 반환합니다. 삭제가 완료되었으므로 has()로 존재 여부를 체크해보면 당연히 false를 반환하게 됩니다.