이 이야기는 개발자들의 소소한 조크에서 시작되었습니다.
그날, 어쩌다 평양냉면 얘기가 나왔는데 그때 한 분이 이런 말을 하셨습니다.
평양냉면 그거 null맛 아니냐?
아시는 분은 아시다시피 null은 개발자스러운 joke에 자주 사용되는 친구입니다. (null 사랑해 등등) 이때도 그냥 "킄킄 그러네요" 하면서 넘어갔는데 순간 머리속에서 이런 생각이 불현듯 떠올랐습니다.
평양냉면 그거 undefined맛 아니냐? 라는 말은 말이 안되는건가?
그래서 알아봅니다. null과 undefined, 그리고 none에 대해. 똑같이 "없는 값"을 나타내는 방식이지만 뭐가 다른걸까요?
undefined는 한마디로 변수 선언만 되어 있고 값이 할당되어 있지 않은 상태입니다.
예를 들어, 보통 이런 경우에 우리는 undefined를 자주 마주합니다.
var x;
function func(){
return x;
}
func();
// undefined
위 코드에서 x라는 변수는 선언되는 시점에서 type이나 value는 정해지지 않은 상태입니다. 이런 상태의 x에 접근하려고 할 때 자바스크립트 엔진은 x에 undefined를 자동으로 할당합니다. 따라서 x를 출력하면 undefined라는 값이 반환되게 됩니다.
물론 빈 값을 의도적으로 사용하려 하는 상황에서도 undefined를 할당해서 사용할 수 있습니다. 하지만 이 경우, 코드 작성자가 의도적으로 빈 값을 유도했는지, logical error에 의해 빈 값이 나오는 건지 구분하지 못할 수 있습니다.
null은 값이 있긴 있는데, 의도적으로 비어있는 값인 상태입니다. 애초에 undefined와 타입에서부터 차이가 드러나는데, undefined는 타입 자체가 undefined이며, null은 object 타입으로 구분됩니다.
const x = null;
const y = undefined;
console.log(typeof x); // -> "object"
console.log(typeof y); // -> "undefined"
의도적으로 빈 값을 사용해야 할 일이 있을때 undefined를 할당하는 대신 null을 사용하면 앞서 언급한 문제를 해결할 수 있습니다.
파이썬은 null, undefined를 구분하지 않고 그냥 None(class Nonetype)으로 통칭해서 쓰는 편인 것 같습니다.
[node]대용량 데이터 처리에 필수적인 stream 이해하기 (2) | 2021.11.28 |
---|---|
jest에서 테스트 함수의 내부 모듈 함수 mock하기 (0) | 2021.11.20 |
Int의 1000 단위마다 ',' 찍어주는 코드 (0) | 2020.11.04 |
callback 함수 활용하기 / 자바스크립트 (0) | 2020.09.16 |
console 객체 이용 / 자바스크립트 (0) | 2020.07.23 |
댓글 영역