4.2 널 가능성
자바와 마찬가지로 코틀린의 참조 값에는 아무것도 참조하지 않는 경우를 나타내는 특별한 null(널)이라는 값이 있다. 이 참조는 그 어떤 할당된 객체도 가리키지 않는 참조를 뜻한다. 널은 다른 참조와 비슷하게 동작하지 않는다. 자바에서는 모든 참조 타입의 변수에 널을 대입할 수 있지만, 이때 이 참조 타입(하지만 값은 널임)에 정의된 메서드나 프로퍼티를 사용하려고 하면 NullPointerException(줄여서 NPE라고 부름)이 발생한다. 이 오류가 최악인 이유는 컴파일러가 정적인 타입 정보만으로는 이런 오류를 잡아낼 수 없어서 런타임에 프로그램을 실행해봐야 이 오류를 찾을 수 있기 때문이다.3
코틀린 타입 시스템에는 널 값이 될 수 있는 참조 타입과 널 값이 될 수 없는 참조 타입을 확실히 구분해주는 큰 장점이 있다. 이 기능은 널 발생 여부를 컴파일 시점으로 옮겨주기 때문에 악명 높은 NullPointerException 예외를 상당 부분 막을 수 있다.
이 절에서는 널이 될 수 있는 값을 표현할 때 쓰이는 타입을 설명하고, 널을 다룰 때 사용하는 기본적인 연산을 살펴본다. 또 12장 자바 상호 운용성에서 자바와 코틀린을 상호 운용할 때 생기는 널 가능성 문제를 다룰 것이다.