Development/Spring Boot3 (Kotlin)

[Kotlin] 기본 예제 6 - nullable ? , ?. , ?: , !!. 간단 설명

Tradgineer 2023. 8. 30. 00:01

 

1. variable은 기본적으로 null을 가질 수 없어서 컴파일 에러가 발생

 

var a: String = null // 컴파일 에러

 

 

 

 

 

2. ?를 사용해 null을 가질 수 있도록 코드 작성

 

 var a: String? = null // 가능

 

 

 

 

 

3. ?.

 

 - Safe Call Operator

 

 Kotlin에서 ?. 연산자는 객체가 null인 경우 메서드 호출 또는 프로퍼티 참조를 안전하게 처리합니다. 만약 객체가 null이면, 이후의 호출/참조는 무시되고 전체 표현식은 null을 반환합니다.

 

val nameLength = person?.name?.length // person 또는 name이 null인 경우에도 에러없이 작동하며, 그 결과로 nameLength에는 Int? 타입의 값이 저장됩니다.

 

 

 

 

 

4. ?:

 

 - Elvis Operator Elvis

 

 연산자(?:)는 왼쪽 피연산자가 널(null)인 경우 오른쪽 값을 반환합니다.

 

val nameLength = person?.name?.length ?: 0 // 만약 person 또는 name 이 널(null)일 경우에 length 대신 0 을 반환합니다.

 

 

 

 

 

5. !!.

 

 - Non-null Assertion Operator

 

 Kotlin에서 non-null assertion operator(!!.)은 개발자가 해당 변수가 절대적으로 널(null)값을 가지지 않음을 보장할 때 사용됩니다. 만약 해당 변수에 널(null)값이 할당되어 있다면 NullPointerException(NPE)가 발생합니다.

 아래는 오류가 발생하는 예제 소스코드입니다.

fun main() {
    val name: String? = null
    println(name!!.length)
}

 - 오류 문구

Exception in thread "main" kotlin.KotlinNullPointerException

 NPE는 자바와 같은 언어에서 매우 일반적인 런타임 오류입니다. 이 오류는 프로그램 실행 중에 발생하므로, 개발 단계에서 미처 발견하지 못한 경우 사용자 경험을 심각하게 해칠 수 있습니다. 즉, NPE가 발생하면 프로그램의 정상적인 흐름이 중단되며, 예기치 않은 동작으로 이어질 수 있습니다. 따라서 가능한 한 Null Safety 기능을 활용하여 NPE를 방지하는 것이 좋습니다.

 Kotlin의 경우 nullable type(?)과 safe call operator(?.), elvis operator(?:) 등 여러 가지 기능을 제공하여 NPE를 방지할 수 있는 강력한 도구들을 제공합니다.