inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

모던 자바스크립트(javascript) 개발을 위한 ES6 강좌

WeakSet 으로 효과적으로 객체타입저장하기

ws.has(arr) 문의 입니다.

226

조세진

작성한 질문수 2

4

arr = null을 했다고 하더라도,

가비지 컬렉터 입장에서 보면 ws에서 참조 중이기 때문에 가비지 컬렉견 대상으로는 되지 않을 것 같습니다.

가비지 컬렉션 대상으로 인식한다는 근거로 제시하신 것이

ws.has(arr) 인데, arr에 null값을 넣고 하였으니...

ws.has(null)이니 당연 false나오는 거 아닌가요?

답변바랍니다

es6 javascript

답변 2

0

user

이게 이제 누군가가 arr = null 로 수정했어도 이미 ws 변수에서 arr를 참조하고 있으니까 그 자체만으로 가비지 컬렉션 대상이 안되고 유지되는거 아니냐 하시는 것 같은데 잘 보시면은 강사님 말씀처럼 WeakSet이 애초에 약한 참조를 하도록 만들어 졌어요. 만약 강한 참조를 하게 되면 arr = null을 해도 컬렉션 대상 안되거든요? 근데 약한 참조라서 null을 하게 되면 수집 대상이 되는 거라고 알고 있습니다. 그냥 강사님 말을 복붙한거져. 근데 왜?! 이런 거잖습니까? 거기에 대해서 말씀드리면은 메모리 때문에 그래요. JS개발하면 보통 메모리 신경 잘 안쓰는 사람 많은데 Weakset은 객체를 약한 참조로 저장하고 내부 데이터나 객체의 상태는 저장안해요. 감싸고 있는 객체 레퍼런스 주소만 저장하는거에요. 그리고 객체가 다른 곳에서 참조되지 않을 때 가비지 컬렉터가 스윽 보다가 해당되면 지워버리고 메모리 사용을 줄이는 컨셉인거죠. 이런 패턴, 약한 참조를 걸어두는 방식은 이벤트 리스너와 콜백 그리고 DOM 트리 구조에서 UI 업데이트할때도 쓰입니다. 이벤트 리스너가 WeakMap에 저장되면, 해당 객체가 더 이상 참조되지 않을 때 가비지 컬렉터에 의해 객체가 수집됩니다. 그리고 WeakMap에서 해당 객체와 연결된 이벤트 리스너도 자동으로 제거됩니다.

0

밍그닥

저도 이렇게 생각했네요.

2022년 기준 웹팩 설정하실 때

0

343

0

로또 구현

0

286

0

선생님, arrow 로 활용해서 스크립트 짜봤는데 왜 안될까요? ㅠㅠㅠ

0

256

0

Cannot get 은 무엇이 문제인걸까요?

0

574

0

작업했습니다.

2

237

0

타입 관련 궁금한 점이 있습니다.

1

254

1

Set 사용 안 한 풀이법

0

227

1

로또

0

251

0

이거 링크 없는거 맞죠?

0

194

0

export default 해도

0

204

0

로또 번호 생성 풀이는 없나요??

2

212

0

예제 오류 입니다.

0

193

0

로또 번호 생성기 소스코드

0

338

0

강의에서 사용하시는 툴이 궁금해요

0

265

1

풀이가 없어서

1

249

0

this 바인딩 질문드립니다~

0

240

1

bundle.js 내용이 index.js와 동일합니다

0

737

4

로또 번호 생성기 풀이

0

267

0

전 html 파일을 만들어서 해결해봤습니다.

0

218

0

newArr에 map으로 묶은 fucntion 인자들은 어디서 받아오는 값인가요?

0

200

0

제 답변 올립니다.

0

233

1

로또번호 생성기 풀이

0

157

0

왜 이건 유튜브로 나와요?

0

194

0

2020.04 최신 버전으로 진행시 참고하시면 될거같습니다.

13

616

2