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))
}