til - JavaScript

2025-04-21 TIL-undefined와 null의 차이점

undefined와 null의 차이점

undefinednull은 모두 “값이 없음”을 나타내는 값이지만, 그 의미와 쓰임새에는 분명한 차이가 있다.

undefined: 값이 할당되지 않은 상태

자바스크립트에서 undefined자동으로 부여되는 값이다.

변수를 선언했지만 아직 값을 할당하지 않으면, 자바스크립트는 해당 변수에 자동으로 undefined를 할당한다.

let a;
console.log(a); // undefined

이처럼 a는 선언만 되었고 값이 할당되지 않았기 때문에 자동으로 undefined 상태가 된다.

null: 의도적으로 비어 있음을 명시

null은 개발자가 직접 할당하는 값으로, “이 변수는 일부러 비워둔 것”이라는 의도를 담고 있다.

let b = null;

이 경우 b는 아직 유효한 값을 가지지 않지만, 그 상태가 의도적인 빈 값이라는 것을 명확히 표현하고 있다.


비교 연산에서의 차이

  • undefined == nulltrue (느슨한 비교에서는 서로 같다고 판단함)
  • undefined === nullfalse (엄격한 비교에서는 서로 다른 타입으로 판단함)

메모리 관리와의 관계

null은 가비지 컬렉션을 유도할 수 있다.

어떤 객체를 더 이상 사용하지 않을 경우, 해당 객체를 참조하는 변수를 null로 설정하면 참조가 끊어지게 되고, 자바스크립트의 가비지 컬렉터는 해당 객체를 메모리에서 제거할 수 있다.

let data = { large: "data" };
data = null; // 객체에 대한 참조 해제 → 가비지 컬렉션 대상

이런 방식은 특히 대용량 데이터를 메모리에서 수동으로 정리하고 싶을 때 유용하다.

undefined는 메모리 해제와 직접적인 관련이 없다.

변수를 undefined로 설정하는 것은 단순히 “값이 정의되지 않음”을 나타내는 것이며, 가비지 컬렉션을 유도하지는 않는다.

let obj = { name: "test" };
obj = undefined; // 참조는 여전히 존재할 수 있음 → 해제되지 않을 수도 있음

가비지 컬렉터는 변수의 값이 아니라 참조 여부를 기준으로 동작하므로, 메모리를 명시적으로 해제하려면 null을 사용하는 것이 일반적이다.

카테고리:

업데이트: