[개념] 가비지 컬렉션 - null vs undefined

iamhyunji·2022년 5월 12일
1
post-thumbnail

들어가기 전에


지난 시간에 가비지 컬렉션(GC)의 개념에 대해 공부했다.

공부한 내용 중에는 객체를 의도적으로 가비지 컬렉션이 처리하게 하는 방법도 알게 됐다.

우리가 사용한 객체를 가비지 컬렉션이 처리할 수 있도록 하려면, 우리는 해당 객체를 unreachable한 상태로 만들어줘야 한다.
객체를 unreachable한 상태로 만드는 방법은 해당 객체에 대한 참조를 없애면 된다.

그렇다면 객체 참조 해제는 null만 가능한 것인가?
undefined는 사용하면 안될까?
만약 가능하다면 null과 undefined의 차이는 무엇일까?

위와 같은 궁금증에 오늘은 null과 undefined에 대해 알아보고자 한다.

null


  • 객체 데이터가 없음을 의미
  • js의 원시
  • falsy하게 취급함
  • 전역 객체(global object)의 속성을 위한 식별자가 아님
  • 식별자 = 변수명
  • 식별되지 않는 것을 표시
  • 어떠한 객체도 참조하고 있지 않음을 의미

undefined


  • 원시값 undefined을 의미
  • 원시 타입
  • 전역 객체의 속성
  • 전역 변수
  • 식별자로 사용 가능하나 좋은 행동은 아님

null vs undefined


  • 둘 다 가능
  • chrome, node의 v8 엔진에서는 null이 아주 약간 더 빠르다는 의견
  • undefined가 null보다 조금 더 길이 길기 때문에 JIT에서 4byte 더 메모리 차지해

위에는 약간의 차이를 구분했을 뿐, 찾아보면 null과 undefined 모두 성능 차이가 엄청나게 나진 않는다고 한다.
그럼에도 나는 참조를 해제하고자 한다면 null을 사용하려 한다.
그 이유는 아래와 같.

  • null과 undefined의 정의
  • 다른 언어와의 호환성
  • 개발 관습

🔗 참고자료


profile
Lv0. 웹 개발 (❤️❤️❤️🤍)

0개의 댓글