더북(TheBook)

2.8

코틀린은 널 참조를 독특한 방식으로 다룬다. 6장에서 보겠지만, 널 참조는 컴퓨터 프로그램에서 버그를 가장 많이 발생하게 하는 원인이다. 코틀린은 반드시 널 참조를 처리하도록 강제함으로써 이런 문제를 해결한다.

코틀린에서는 널이 될 수 있는 타입과 널이 될 수 없는 타입을 구분한다. 정수를 예로 보자. –2,147,483,648 ~ 2,147,483,647 범위에 있는 정수를 표현하려면 코틀린에서는 Int 타입을 사용한다. 이 타입에 대한 참조는 이 범위에 속한 값을 가질 수 있고, 그 외 다른 값은 가질 수 없다. 특히, null이 이 범위에 속해 있지 않기 때문에 Int 타입에 대한 참조가 null을 값으로 가질 수도 없다. 하지만 코틀린에는 Int?라는 타입이 있는데, 이 타입의 참조는 Int 타입의 참조가 가질 수 있는 범위에 속한 값을 가질 수 있고, 추가로 null도 값으로 가질 수 있다.

Int는 널이 될 수 없는(non-nullable) 타입이라고 하고, Int?는 널이 될 수 있는(nullable) 타입이라고 한다. 코틀린에서는 모든 타입에 이런 메커니즘을 사용한다. 즉, 모든 타입에는 널이 될 수 있는 타입(뒤에 ?를 붙여 표시)과 널이 될 수 없는 타입이라는 두 가지 버전이 있다. 여기서 가장 흥미로운 부분은 널이 될 수 없는 타입이 이것에 상응하는 널이 될 수 있는 타입의 자식 타입이라는 점이다. 예를 들어 다음은 올바른 코틀린 코드다.

val x: Int = 3
val y: Int? = x

하지만 다음은 잘못된 코드다.

val x: Int? = 3
val y: Int = x
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.