undefined와 null 의 차이점

Woody·2025년 8월 14일

매일메일

목록 보기
8/13

오늘의 질문

undefined와 null 의 차이점에 대해서 설명해주세요

내답변

서버단에서 내려주는 null 은 값이 없음을 뜻하지만 undefined는 어떤 문제로 찾을수 없음에 가깝다

두개의 오류 방지를 위해 타입을 명확히 하거나, 옵셔널 체이닝으로 방어하는 방법이 있다

실제답변

두개 모두 '값이 없다' 의 의미이지만 쓰임새와 의미에 차이점이 존재한다.

undefined자바스크립트에서 자동으로 할당되는 값이다.
변수는 선언했지만 값을 할당하지 않을때, 자동으로 할당하게 된다

반면에 null개발자가 의도적으로 할당하는 값이다. 특정 변수가 값이 없음을 명확히 하기 위해 넣어주는 것이다.

느슨한비교인 '==' 에서는 null 과 undefined 가 같게 처리되지만, 엄격한 비교 '===' 에서는 다르게 취급된다

메모리 관련

null 은 개발자가 명시적으로 메모리를 해제하고자 할 때 사용하는 방법이다. 객체를 참조하던 변수를 null 로 설정하면, 해당 변수는 더 이상 그 객체를 가리키지 않으므로 참조가 끊어진다. 이렇게 참조가 끊기면 JavaScript 의 GC 에서 메모리 제거를 실행한다. 이를 통해 정리 대상으로 유도가 가능할 것이다.

undefined는 자바스크립트 엔진이 자동으로 할당하는 값으로, 메모리 해제외는 관련이 없다.

느낀점 + 추가정보

두개의 차이를 어렴풋이 알고는 있었지만 명확히 알게되었다. 메모리에 관련된것도 기억해두면 좋을 것 같다.

추가적으로 NaN 은 Not a Number 의 약자로 숫자가 아닌 값을 의미한다. 숫자 타입이지만, 숫자가 아닌 것에 대한 값의 표현인데 예를들어 '100' 은 Number 지만, '100AB' 는 숫자 변환시 오류가 발생할 것이다. 이에 Number 변환은 했지만, 잘못된 값임을 의미한다

1. 타입 체크시 주의사항

// typeof의 특이한 동작
typeof undefined // "undefined"
typeof null      // "object" (JavaScript의 오래된 버그)

// 올바른 null 체크 방법
if (value === null) { }
if (value == null) { } // undefined도 함께 체크

2. 함수 매개변수와 기본값

// undefined는 기본값을 트리거하지만, null은 그렇지 않음
function greet(name = 'Guest') {
  console.log(`Hello, ${name}`);
}

greet(undefined); // "Hello, Guest"
greet(null);      // "Hello, null"

3. 옵셔널 체이닝과 Nullish 병합 연산자

// 옵셔널 체이닝 (?.)
const value = obj?.property?.nested;

// Nullish 병합 연산자 (??)
const result = value ?? 'default'; // null/undefined일 때만 default
const result2 = value || 'default'; // falsy 값(0, '', false 등) 모두 default

4. Typescript 에서의 활용

// 명시적 타입 정의
type User = {
  name: string;
  email?: string;        // undefined 가능
  deletedAt: Date | null; // null 명시적 사용
};

// 타입 가드
function isNotNullish<T>(value: T | null | undefined): value is T {
  return value !== null && value !== undefined;
}

// 사용 예시
const users: (User | null)[] = [user1, null, user2];
const validUsers = users.filter(isNotNullish); // User[] 타입

실제 실무에서 사용하는 방식들

  • API 응답 처리: 서버에서 의도적으로 "값 없음"을 표현할 때는 null 사용 ex) data:null
  • 상태 관리: Redux나 상태 관리 라이브러리에서 초기값은 null로 설정 (로딩 상태 구분)
  • 폼 검증: 사용자가 입력하지 않은 필드는 undefined, 의도적으로 비운 필드는 null
  • 데이터베이스: SQL의 NULL은 JavaScript의 null로 매핑
profile
프론트엔드 개발자로 살아가기

0개의 댓글