더북(TheBook)

2.3.5 nullable이 아니라 non-nullable이라 했어야 한다

이 업계에 오래 몸담은 개발자라면 모두 한 번쯤은 NullReferenceException을 만나게 된다. (null)을 처음 고안한 것으로 잘 알려진 토니 호어4는 애초에 이것을 처음 만든 것이 ‘10억 달러의 실수’라고 했다. 하지만 절망적이기만 한 것은 아니다.

널에 대한 짧은 이야기

널은 값이 없음을 의미하거나 프로그래머의 무관심을 상징하는 값이다. 보통 값이 0인 것과 동일한 의미를 갖는다. 값이 0인 메모리 주소는 메모리의 유효하지 않은 영역을 의미하기 때문에, 현재의 CPU는 이 유효하지 않은 액세스를 포착하여 쉬운 예외 메시지로 변환한다. 널 액세스를 확인할 수 없었던 과거에는 컴퓨터가 중지되거나 손상되거나 재부팅되곤 했다.

어쨌든 코드에서 누락된 값을 설명해야 하므로 정확히는 널 자체가 문제가 되지는 않는다. 널은 어떠한 목적 때문에 존재한다. 기본으로 모든 변수에 널을 할당할 수 있지만, 예기치 않게 널이 할당돼도 확인하지 않는다는 것이 문제다. 결국 예기치 않은 위치에 널이 할당되고 결국 충돌이 발생할 것이다.

자바스크립트는 마치 타입 시스템에 아무런 문제가 없는 것처럼 다른 널 두 개를 가지고 있다. 널과 undefined(아직 할당하지 않은 값)이다. 널은 값이 없다는 것을, undefined는 아직 할당조차 되지 않은 값을 의미한다. 마음이 아프더라도, 자바스크립트는 그냥 원래 이렇다고 받아들여야 한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.