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))  
    }
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.