null과 undefined의 차이점

kimsnmyng·2025년 1월 22일

Front-End CS

목록 보기
33/79

null과 undefined의 차이점

JavaScript에서 nullundefined는 모두 "값이 없음"을 나타내지만, 의미와 사용 목적에서 차이가 있는 것이다. 이 둘은 메모리 관리와 가비지 컬렉션에도 서로 다른 영향을 미치는 것이다.

1. 정의와 사용

  • undefined
    • JavaScript 엔진이 자동으로 할당하는 기본 값이다.
    • 변수를 선언했지만 값을 할당하지 않은 경우, 해당 변수는 undefined 값을 가지는 것이다.
    • 함수가 명시적으로 반환값을 지정하지 않으면 undefined를 반환하는 것이다.
    • 객체의 존재하지 않는 속성에 접근할 때도 undefined가 반환되는 것이다.
let a; // 선언만 하고 초기화하지 않음
console.log(a); // undefined
let obj = {};
console.log(obj.prop); // undefined
  • null
  • 개발자가 의도적으로 "값이 없음"을 나타내기 위해 할당하는 값이다.
  • 주로 변수를 초기화하거나, 더 이상 사용하지 않음을 명시적으로 나타낼 때 사용하는 것이다.
let b = null; // 의도적으로 값이 없음을 지정
console.log(b); // null

2. 타입

  • typeof undefined"undefined"를 반환하는 것이다.
  • typeof null"object"를 반환하는데, 이는 JavaScript 설계 초기의 버그로 현재까지 유지되고 있는 것이다.

3. 비교

  • 느슨한 비교(==)에서는 nullundefined가 동등하게 간주되는 것이다.
  • 엄격한 비교(===)에서는 서로 다른 값으로 간주되는 것이다.
console.log(null == undefined); // true
console.log(null === undefined); // false

4. 메모리 관리와 가비지 컬렉션

  • null:
  • 객체를 참조하던 변수를 null로 설정하면, 해당 참조가 끊어지고 가비지 컬렉션 대상이 되는 것이다.
  • 예:
    let obj = { key: "value" };
    obj = null; // 더 이상 obj가 객체를 참조하지 않음 → 가비지 컬렉션 대상
  • undefined:
  • 메모리 해제와 직접적인 관련은 없는 것이다. 단순히 "값이 정의되지 않음"을 나타낼 뿐이다.
  • 변수를 undefined로 설정한다고 해서 가비지 컬렉션 대상이 되지는 않는 것이다.

5. JSON 직렬화

  • JSON 직렬화 시:
  • null 값은 유지되는 것이다.
  • undefined 값은 무시되는 것이다.
const obj = { a: null, b: undefined };
console.log(JSON.stringify(obj)); // {"a":null}

6. 권장 사용

  • 변수에 값이 없음을 명시적으로 나타내야 할 경우 null을 사용하는 것이 좋다.
  • JavaScript 엔진이 자동으로 할당하는 undefined를 명시적으로 설정하는 것은 권장되지 않는 것이다.

결론

  • undefined: JavaScript가 자동으로 할당하며, "초기화되지 않음" 또는 "존재하지 않음"을 나타내는 것이다.
  • null: 개발자가 의도적으로 설정하며, "값이 없음" 또는 "참조를 제거함"을 명시하는 것이다.

올바른 상황에서 이 두 값을 적절히 사용하는 것이 코드의 가독성과 유지보수성을 높이는 데 중요한 것이다.

profile
안녕하세요 김선명입니다.

0개의 댓글