undefined와 null의 차이점

승민·2025년 5월 9일
0

면접 대비

목록 보기
29/31

undefined와 null은 모두 값이 없음을 나타내지만, 다음과 같은 차이가 있습니다

  1. 특징
    undefined 변수가 선언되었지만 값이 할당되지 않은 상태로 JavaScript 엔진이 자동으로 부여합니다.
    null 개발자가 의도적으로 값을 비워둔 상태로, 명시적으로 할당합니다.

  2. 비교
    느슨한 비교(==)에서는 null과 undefined가 같다고 간주
    엄격한 비교(===)에서는 다릅니다.

  3. 메모리 관리
    null은 객체 참조를 끊어 가비지 컬렉션을 유도할 수 있지만, undefined는 메모리 해제와 직접 관련이 없습니다.

프론트엔드에서는 null을 사용해 객체 참조를 해제하거나 초기화 상태를 명시하고, undefined는 값이 정의되지 않은 상태를 체크할 때 주로 사용됩니다.

undefined의 특징

변수가 선언되었지만 값이 할당되지 않았거나, 객체 속성이 존재하지 않거나, 함수가 값을 반환하지 않을 때 JavaScript 엔진이 자동으로 부여.

let variable; // 값이 할당되지 않음
console.log(variable); // undefined

const obj = {};
console.log(obj.someProperty); // undefined

function noReturn() {}
console.log(noReturn()); // undefined

메모리 관리
undefined는 단순히 값이 정의되지 않은 상태를 나타내며, 가비지 컬렉션 대상 여부와 직접 관련 없음. 변수가 undefined여도 메모리 해제를 유도하지 않음.

사용 사례
프론트엔드에서 변수 초기화 여부 확인(예: if (value === undefined)), 함수 반환값 체크 등.

null의 특징

개발자가 의도적으로 값을 비워둔 상태로, 명시적으로 할당.
의도적인 빈 값을 나타냄.

let variable = null; // 명시적으로 빈 값 설정
console.log(variable); // null

const obj = { data: "test" };
obj.data = null; // 참조 해제 의도
console.log(obj.data); // null

메모리 관리
null은 객체 참조를 끊어 가비지 컬렉터가 해당 객체를 메모리에서 해제하도록 유도. 예: 대용량 객체를 더 이상 사용하지 않을 때 null로 설정해 메모리 최적화.

let largeData = { huge: new Array(1000000).fill("data") };
largeData = null; // 참조 해제, 가비지 컬렉션 대상

사용 사례
프론트엔드에서 초기화된 빈 상태 표현, 객체 참조 해제, API 응답에서 값이 없음을 명시.

비교 연산

느슨한 비교 (==)는 null과 undefined는 같다고 간주.

console.log(null == undefined); // true

엄격한 비교 (===)는 타입과 값이 다르므로 다르게 간주.

console.log(null === undefined); // false

메모리 관리와의 관계

null
객체 참조를 끊어 가비지 컬렉터가 메모리를 해제하도록 유도.
예: 대용량 데이터 객체를 null로 설정해 메모리 누수 방지.

let userData = { profile: new Array(1000000).fill("info") };
userData = null; // 메모리 해제 유도
undefined:

단순히 값이 정의되지 않은 상태를 나타내며, 메모리 해제와 직접 연관 없음.
변수가 undefined여도 가비지 컬렉션 대상이 되지 않음.

주의점

  1. null과 undefined를 명확히 구분해 사용.

  2. 값이 의도적으로 비어 있어야 할 때는 null, 초기화되지 않은 상태는 undefined로 자연스럽게 처리.

  3. typeof null은 "object"를 반환하므로, null 체크 시 === null 사용 권장.

console.log(typeof null); // "object" (JavaScript 버그)
console.log(typeof undefined); // "undefined"
  1. ESLint 규칙으로 no-undef 또는 eqeqeq 규칙으로 undefined와 null의 부주의한 사용 방지.

결론

undefined는 JavaScript가 값이 없는 상태를 자동으로 부여하는 값이며, null은 개발자가 의도적으로 빈 값을 설정하는 값입니다. 프론트엔드에서는 null을 객체 참조 해제나 초기화 상태 표현에, undefined를 초기화되지 않은 상태 체크에 주로 사용합니다. 엄격한 비교(===)를 사용하고, 메모리 관리 시 null을 활용해 가비지 컬렉션을 최적화하며, 코드 의도를 명확히 전달해야 합니다.

0개의 댓글