더북(TheBook)

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
}

nulls 파라미터에 넘기면 컴파일 오류가 발생한다.

fun main() {
  println(isLetterString("abc")) // Ok
  // error: null can not be a value of a non-null type String
  println(isLetterString(null))  
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.