자바스크립트에서 typeof null 연산자가 잘못된 결과인 "object"를 반환하는 특이한 동작을 설명합니다.
이는 자바스크립트의 초기 구현 단계에서 타입 태깅(type tagging) 시스템에 버그가 있었기 때문인데, 당시 내부적으로 null을 널 포인터(null pointer)로 표현했고 이것이 우연히 객체(object)의 태그와 일치하게 되었던 것입니다.
자바스크립트의 창시자인 브렌던 아이크(Brendan Eich)도 이를 오류로 인정했습니다.
이 동작은 이미 이를 활용한 기존 웹사이트들의 호환성을 해칠 위험이 있어 수정되지 않고 유지되고 있습니다.
따라서 개발자들은 typeof 연산자에 의존하기보다는 엄격한 일치 연산자(===)를 사용하여 null 여부를 확실히 확인할 것을 권장합니다.
이번 영상 주요 논점입니다:
1. 역사적 배경: C 언어와의 연결고리. 1995년도 JavaScript 초기 버전을 "Mocha"라고 명명했습니다. Mocha는 C 언어의 구별된 유니온(discriminated union)을 사용합니다. C의 구별된 공용체(discriminated union)은 무엇일까요? 이 C 언어의 무엇이 자바스크립트 원시값(primitive value)과의 연결고리일까요?
브랜든 아이크(Brendan Eich)가 C 언어 기술을 사용했습니다. 당시 null은 내부적으로 객체의 타입 태그와 일치하는 방식으로 표현되었기 때문에 이러한 문제가 발생했습니다.
2. 버그에 대한 상세 설명: typeof null이 "object"로 평가되는 당혹스러운 자바스크립트 동작을 다룹니다. 이는 의도적인 설계가 아니라 자바스크립트 초기 구현 과정에서 발생한 역사적인 버그에서 비롯된 것입니다. 이 버그에 대해 깊이 살펴봅니다.
3. 그렇다면 왜 고치지 못할까? null은 원시 값(primitive value)이지만, 이 잘못된 동작을 수정하면 기존 웹사이트들이 깨질 위험이 있어 수정되지 않고 유지되고 있습니다.
4. 개발자로서 실무적인 대응 방법: JavaScript typeof 연산자를 사용할 경우 발생할 수 있는 문제를 피하기 위해 null을 확인할 때 엄격한 일치 연산자(===)를 사용할 것을 개발자들에게 권장합니다.
#코딩 #자바스크립트 #c언어 #프로그래밍 #개발자