[kotlin] 널 값 처리를 위한 패턴과 테크닉

널(null) 값은 프로그래밍 시 발생할 수 있는 많은 오류 중 하나입니다. 코틀린(Kotlin)은 널 안정성을 보장하기 위한 다양한 패턴과 테크닉을 제공하는데, 이를 적절히 활용하면 널 포인터 예외(NullPointerException)를 방지하고 안정적인 프로그램을 작성할 수 있습니다. 이번 포스트에서는 코틀린에서 널 값 처리를 위한 패턴과 테크닉을 소개하겠습니다.

1. 널 가능성 처리

코틀린은 변수의 널 가능성을 명시적으로 표현하기 위해 ? 연산자를 제공합니다. 이를 활용하여 널 가능성이 있는 변수를 다룰 때 안전하게 처리할 수 있습니다.

val name: String? = null
val length = name?.length // 만약 name이 널 값이면 length에는 null이 할당됨

2. 안전한 호출 연산자

널 가능성이 있는 변수에 대해 메서드나 프로퍼티를 호출할 때 안전한 호출 연산자 ?.를 사용하여 널 값일 때에는 호출하지 않고 널을 반환합니다.

val user: User? = getUser()
val email: String? = user?.email // 만약 user가 널 값이면 email에는 null이 할당됨

3. 엘비스 연산자

엘비스 연산자 ?: 는 널 값일 때 대체할 값을 지정할 수 있습니다.

val nullableName: String? = getName()
val name: String = nullableName ?: "Unknown" // 만약 nullableName이 널 값이면 "Unknown"이 할당됨

4. 널 병합 연산자

널 병합 연산자 ?: 는 널 값인 경우에만 우측의 표현식을 실행하여 대체 값을 반환합니다.

val nullableName: String? = getName()
val length: Int = nullableName?.length ?: 0 // 만약 nullableName이 널 값이면 0이 할당됨

5. 널 단언 연산자

널 단언 연산자 !! 는 변수가 널 값이 아님을 단언하고 강제 언랩핑을 수행합니다. 이 연산자를 남용하면 널 포인터 예외가 발생할 수 있으므로 주의가 필요합니다.

val name: String? = getName()
val length: Int = name!!.length // name이 널 값이 아님을 단언하고 length에 할당

널 값 처리를 위한 위의 패턴과 테크닉을 적절히 활용하면 안전하고 안정적인 코틀린 프로그램을 작성할 수 있습니다.

이상으로 코틀린에서 널 값 처리를 위한 패턴과 테크닉에 대해 알아보았습니다.

참고 문헌: