본문 바로가기
Java/Android App - Kotlin

Kotlin - Null 허용 변수

by 키모형 2023. 1. 3.
반응형

Kotlin 에서는 Null 오류를 방지하기 위해 Null 허용 변수 선언법을 따로 지정하고 있다

Null 허용변수 선언 방법 (변수 선언시 자료형뒤에  ? 를 붙여서 선언)

조건문에 null 값 비교

 

?. 안전 호출 연산자 사용

?. 안전 호출 연산자를 사용하여 null을 허용하는 변수의 메서드나 속성에 액세스할 수 있습니다.

?. 안전 호출 연산자를 사용하여 메서드나 속성에 액세스하려면 변수 이름 뒤에 ? 기호를 추가하고 . 표기법으로 메서드나 속성에 액세스합니다.

?. 안전 호출 연산자를 사용하면 null을 허용하는 변수에 더 안전하게 액세스할 수 있습니다. Kotlin 컴파일러가 null 참조에 관한 멤버 액세스 시도를 중지하고 액세스된 멤버의 null을 반환하기 때문입니다.

null을 허용하는 favoriteActor 변수의 속성에 안전하게 액세스하려면 다음 단계를 따르세요.

 

println() 문에서 . 연산자를 ?. 안전 호출 연산자로 대체합니다.

fun main() {
    var favoriteActor: String? = "Sandra Oh"
    println(favoriteActor?.length)
}

이 프로그램을 실행한 후 예상대로 출력되는지 확인합니다.

9

 

null이 아닌 어설션 연산자 !! 사용

또한 null이 아닌 !! 어설션 연산자를 사용하여 null을 허용하는 변수의 메서드나 속성에 액세스할 수 있습니다.

null을 허용하는 변수 뒤에 null이 아닌 !! 어설션 연산자를 추가하고 그 뒤에 . 연산자, 메서드나 속성을 차례로 공백 없이 추가해야 합니다.

null이 아닌 !! 어설션은 이름에서 알 수 있듯이 변수의 값이 null이 아님(실제 여부에 관계없이)을 어설션합니다.

?. 안전 호출 연산자와 달리 null이 아닌 !! 어설션 연산자를 사용하면 null을 허용하는 변수가 실제로 null일 때 NullPointerException 오류가 발생할 수 있습니다. 따라서, 변수가 항상 null 비허용 변수이거나 적절한 예외 처리가 설정된 경우에만 실행해야 합니다. 적절히 처리되지 않으면 예외로 인해 런타임 오류가 발생합니다. 예외 처리에 관해서는 이 과정의 후반 단원에서 알아봅니다.

null이 아닌 !! 어설션 연산자를 사용하여 favoriteActor 변수의 속성에 액세스하려면 다음 단계를 따르세요.

  1. 좋아하는 배우의 이름에 favoriteActor 변수를 재할당한 후 println() 문에서 ?. 안전 호출 연산자를 null이 아닌 !! 어설션 연산자로 대체합니다.
 
fun main() {
    var favoriteActor: String? = "Sandra Oh"
    println(favoriteActor!!.length)
}
  1. 이 프로그램을 실행한 후 예상대로 출력되는지 확인합니다.
9

좋아하는 배우 이름의 글자 수는 다를 수 있습니다.

  1. favoriteActor 변수를 null에 재할당한 다음 이 프로그램을 실행합니다.
fun main() {
    var favoriteActor: String? = null
    println(favoriteActor!!.length)
}

NullPointerException 오류가 발생합니다.

이 Kotlin 오류는 실행 중에 프로그램이 비정상 종료되었음을 나타냅니다. 따라서 변수가 null이 아님이 확실하지 않다면 null이 아닌 !! 어설션 연산자를 사용하지 않는 것이 좋습니다.

 

 

변수에 값을 대입할 때 곧바로 조건문은 연결하여 지정해 줄 수 있다.

fun main() {
    val favoriteActor: String? = "Sandra Oh"

    val lengthOfName = if(favoriteActor != null) {
      favoriteActor.length
    } else {
      0
    }

    println("The number of characters in your favorite actor's name is $lengthOfName.")
}

예상대로 출력됩니다.

The number of characters in your favorite actor's name is 9.

 

요약

  • 변수를 null로 설정하여 변수에 값이 없음을 나타낼 수 있습니다.
  • null을 허용하지 않는 변수에는 null을 할당할 수 없습니다.
  • null을 허용하는 변수에는 null을 할당할 수 있습니다.
  • null을 허용하는 변수의 메서드나 속성에 액세스하려면 ?. 안전 호출 연산자나 null이 아닌 !! 어설션 연산자를 사용해야 합니다.
  • if/else 문을 null 검사와 함께 사용하여 null을 허용하지 않는 컨텍스트에서 null을 허용하는 변수에 액세스할 수 있습니다.
  • if/else 표현식을 사용하여 null을 허용하는 변수를 null을 허용하지 않는 유형으로 변환할 수 있습니다.
  • null을 허용하는 변수가 null인 경우 if/else 표현식 또는 ?: Elvis 연산자로 기본값을 제공할 수 있습니다.
반응형