2.3.5 nullable이 아니라 non-nullable이라 했어야 한다
이 업계에 오래 몸담은 개발자라면 모두 한 번쯤은 NullReferenceException을 만나게 된다. 널(null)을 처음 고안한 것으로 잘 알려진 토니 호어4는 애초에 이것을 처음 만든 것이 ‘10억 달러의 실수’라고 했다. 하지만 절망적이기만 한 것은 아니다.
널에 대한 짧은 이야기
널은 값이 없음을 의미하거나 프로그래머의 무관심을 상징하는 값이다. 보통 값이 0인 것과 동일한 의미를 갖는다. 값이 0인 메모리 주소는 메모리의 유효하지 않은 영역을 의미하기 때문에, 현재의 CPU는 이 유효하지 않은 액세스를 포착하여 쉬운 예외 메시지로 변환한다. 널 액세스를 확인할 수 없었던 과거에는 컴퓨터가 중지되거나 손상되거나 재부팅되곤 했다.
어쨌든 코드에서 누락된 값을 설명해야 하므로 정확히는 널 자체가 문제가 되지는 않는다. 널은 어떠한 목적 때문에 존재한다. 기본으로 모든 변수에 널을 할당할 수 있지만, 예기치 않게 널이 할당돼도 확인하지 않는다는 것이 문제다. 결국 예기치 않은 위치에 널이 할당되고 결국 충돌이 발생할 것이다.
자바스크립트는 마치 타입 시스템에 아무런 문제가 없는 것처럼 다른 널 두 개를 가지고 있다. 널과 undefined(아직 할당하지 않은 값)이다. 널은 값이 없다는 것을, undefined는 아직 할당조차 되지 않은 값을 의미한다. 마음이 아프더라도, 자바스크립트는 그냥 원래 이렇다고 받아들여야 한다.