[Kotlin] 코틀린에서 String 객체의 null 처리를 위해 사용되는 연산자(예시 활용)
코틀린에서 String 객체의 null 처리를 위해 사용되는 연산자는 ?(Safe Call Operator), ?.(Safe Access Operator), ?:(Elvis Operation) 그리고 !!(Non-null Assertion Operator, 확정 연산자)가 있습니다.
1. ?
(Safe Call Operator)와 ?.
(Safe Access Operator)
?.
연산자는 객체가 null이 아닐 때만 해당 연산을 수행하고, 객체가 null이면 연산 결과로 null을 반환합니다. 이 연산자는 null 안전성을 보장하는 코틀린의 핵심 기능입니다.?.
연산자는.
연산자와 유사하지만, null이 될 수 있는 객체(String?)에만 사용할 수 있습니다.?.
연산자를 사용하면 NullPointerException 발생을 효과적으로 방지할 수 있습니다.- 예시:
var name: String? = null // name이 null이 아니면 toUpperCase()를 호출하고, null이면 toUpperCase()를 호출하지 않고 null을 반환합니다. println(name?.toUpperCase()) // 출력: null name = "kotlin" // name이 null이 아니므로 toUpperCase()가 호출됩니다. println(name?.toUpperCase()) // 출력: KOTLIN
2. ?:
(Elvis Operator, 엘비스 연산자)
?:
연산자는?.
연산자와 함께 자주 사용됩니다.?.
연산자의 결과가 null일 경우 기본값을 지정하는 데 사용됩니다.?:
연산자는 if-else문을 사용하여 null 체크를 하는 것보다 코드를 훨씬 간결하게 만들어 줍니다.- 예시:
var name: String? = null // name?.toUpperCase()의 결과가 null이므로 "NO NAME"이 반환됩니다. val upperName = name?.toUpperCase() ?: "NO NAME" println(upperName) // 출력: NO NAME name = "kotlin" // name?.toUpperCase()의 결과가 "KOTLIN"이므로 "KOTLIN"이 반환됩니다. val upperName2 = name?.toUpperCase() ?: "NO NAME" println(upperName2) // 출력: KOTLIN
3. !!
(Non-null Assertion Operator, 확정 연산자)
!!
연산자는 개발자가 해당 객체가 null이 아님을 단정할 때 사용합니다. 만약 실제로 객체가 null이면 NullPointerException이 발생합니다.!!
연산자는 코틀린의 null 안정성 기능을 우회하는 위험한 연산자이므로, 정말 필요한 경우가 아니라면, NullPointerException을 방지하기 위해?.
와?:
를 사용하는 것이 좋습니다.- 예시:
var name: String? = "kotlin" // 개발자가 name이 null이 아님을 확신하므로 !!를 사용합니다. println(name!!.toUpperCase()) // 출력: KOTLIN var nullName: String? = null // nullName이 실제로 null이므로 NullPointerException이 발생합니다. println(nullName!!.toUpperCase()) // 런타임 오류: NullPointerException