4.2.1 널이 될 수 있는 타입
코틀린 타입 시스템의 중요한 특징은 널 값을 포함하는 타입과 그렇지 않은 타입을 구분하는 능력이다. 자바에서 모든 참조 타입은 널이 될 수 있는 타입으로 간주된다. 즉, 컴파일러는 어떤 참조 타입의 변수가 null이 아닌 값만 포함한다는 사실을 보장하지 못한다.
하지만 코틀린에서 기본적으로 모든 참조 타입은 널이 될 수 없는 타입이다. 따라서 String 같은 타입에 null 값을 대입할 수 없다. 주어진 문자열에 문자(유니코드에서 문자로 분류되는 코드포인트들)만 들어있는지 검사하는 다음 함수를 살펴보자.
fun isLetterString(s: String): Boolean { if (s.isEmpty()) return false for (ch in s) { if (!ch.isLetter()) return false } return true }
null을 s 파라미터에 넘기면 컴파일 오류가 발생한다.
fun main() { println(isLetterString("abc")) // Ok // error: null can not be a value of a non-null type String println(isLetterString(null)) }