String? 타입에 iterator() 메서드가 없기 때문에 for 루프를 사용해 널이 될 수 있는 문자열에 대한 이터레이션을 수행할 수는 없다.
사실 널이 될 수 있는 타입은 코틀린의 확장 메커니즘을 활용해 자체적인 메서드와 프로퍼티를 제공한다. 5장 고급 함수와 함수형 프로그래밍 활용하기에서 이 주제를 더 자세히 다룬다. 한 가지 예는 문자열을 이어주는 연산(concatenation)이다. 이 연산은 String? 타입의 값에 대해서도 잘 작동한다.4
fun exclaim(s: String?) {
println(s + "!")
}
fun main() {
exclaim(null) // null!
}
그렇다면 isLetterString() 같은 함수가 널이 될 수 있는 값을 제대로 처리하게 바꾸려면 어떻게 해야 할까? 이런 처리를 위해 코틀린은 여러 가지 방법을 제공한다. 이제부터 이 내용을 다뤄보겠다.