웹개발 및 최신 테크 소식을 전하는 블로그, 웹이즈프리

HOME > etc

자바스크립트의 메모리에서 해제하기 위한 방법으로 undefined가 아닌 null을 쓰는 이유는 뭔가요?

Last Modified : 2021-03-22 / Created : 2017-04-27
10,758
View Count

자바스크립트의 메모리에서 해제하기 위한 방법으로 undefined가 아닌 null을 사용하는 경우가 많습니다. 그 이유는 무엇일까요? 결론부터 말하면 찾아봤지만 클리어한 답변을 찾지는 못했습니다. 그 이유 중 하나로 최근에는 이런 고민의 글들을 더 이상 찾을 필요 없을 정도로 가비지 컬렉션의 기능이 그만큼 좋아졌기 때문이다라고 할 수 있습니다


위 질문의 답변은 되지 못하지만 가비지컬렉션을 위해 null, undefined 선언했던 이유는 무엇일까요?
자바스크립트에서 변수를 선언하면 값이 메모리에 저장되게 됩니다. 이때 사용하지 않는 변수의 경우 자동으로 가비지 컬렉션(Gabage Collection)에 의해서 메모리에서 삭제됩니다. 이때 가비지컬렉션이 동작하면서 값을 비우는 방법으로 몇 가지가 있는데 delete 명령어를 사용하는 방법과 변수에 null이나 undefined를 사용하는 방법이죠. (이 방법은 저장된 데이터의 참조를 해제하는 것과 같습니다.) 그런데 null을 사용하는 경우가 undefined보다 더 효과적이라고 하는 글이 있어 이유를 찾아봤었습니다. 결과적으로는 클리어한 답변을 찾지는 못했습니다.


"답변을 찾지 못 한 이유로 더 이상 과거의 답변이 정답이 아니기 때문입니다."
다시 말해서 최근에는 이런 고민의 글들을 더 이상 찾을 필요 없을 정도로 가비지 컬렉션의 기능이 그만큼 좋아졌기 때문이다라고 할 수 있습니다. 다시 말해 예전에는 브라우저의 성능 향상을 위해서 개발자가 컨트롤해야 할 부분이 상당히 많은 부분이 존재했고 기타 팁이나 꼼수 등이 많이 사용되었다면 현재는 그런 부분이 없더라도 대부분 브라우저에서 가장 최선의 동작을 수행해 항상 높은 퍼포먼스를 유지할 수 있게 되었습니다.


끝으로 대부분 자동으로 동작하지만 어떻게 동작하는지는 이해할 필요가 있으며 가비지컬렉션으로 해결할 수 없는 부분은 알아두어야 하겠죠. 최근의 대부분의 브라우저는 Mark-and-Sweep 알고리즘을 사용하여 가비지컬렉션을 구현합니다. 말 그대로 존재하는 모든 참조 변수에 대하여 "Mark"인 표시를 하고 더 이상 참조로 사용되지 않는 값들을 비우는 과정을 의미합니다.

Previous

자바스크립트 날짜가 오늘 기준 하루 지났는지 ~ 얼마나 지났는지 확인하는 방법

Previous

비디오 재생하기 위한 방법으로 hls.js 사용하기