undefined와 null의 차이점
2025-04-21 TIL-undefined와 null의 차이점
undefined와 null의 차이점
undefined
와 null
은 모두 “값이 없음”을 나타내는 값이지만, 그 의미와 쓰임새에는 분명한 차이가 있다.
undefined
: 값이 할당되지 않은 상태
자바스크립트에서 undefined
는 자동으로 부여되는 값이다.
변수를 선언했지만 아직 값을 할당하지 않으면, 자바스크립트는 해당 변수에 자동으로 undefined
를 할당한다.
let a;
console.log(a); // undefined
이처럼 a
는 선언만 되었고 값이 할당되지 않았기 때문에 자동으로 undefined
상태가 된다.
null
: 의도적으로 비어 있음을 명시
null
은 개발자가 직접 할당하는 값으로, “이 변수는 일부러 비워둔 것”이라는 의도를 담고 있다.
let b = null;
이 경우 b
는 아직 유효한 값을 가지지 않지만, 그 상태가 의도적인 빈 값이라는 것을 명확히 표현하고 있다.
비교 연산에서의 차이
undefined == null
→true
(느슨한 비교에서는 서로 같다고 판단함)undefined === null
→false
(엄격한 비교에서는 서로 다른 타입으로 판단함)
메모리 관리와의 관계
null
은 가비지 컬렉션을 유도할 수 있다.
어떤 객체를 더 이상 사용하지 않을 경우, 해당 객체를 참조하는 변수를 null
로 설정하면 참조가 끊어지게 되고, 자바스크립트의 가비지 컬렉터는 해당 객체를 메모리에서 제거할 수 있다.
let data = { large: "data" };
data = null; // 객체에 대한 참조 해제 → 가비지 컬렉션 대상
이런 방식은 특히 대용량 데이터를 메모리에서 수동으로 정리하고 싶을 때 유용하다.
undefined
는 메모리 해제와 직접적인 관련이 없다.
변수를 undefined
로 설정하는 것은 단순히 “값이 정의되지 않음”을 나타내는 것이며, 가비지 컬렉션을 유도하지는 않는다.
let obj = { name: "test" };
obj = undefined; // 참조는 여전히 존재할 수 있음 → 해제되지 않을 수도 있음
가비지 컬렉터는 변수의 값이 아니라 참조 여부를 기준으로 동작하므로, 메모리를 명시적으로 해제하려면 null
을 사용하는 것이 일반적이다.