차이점!! 그리고 ? Kotlin의 연산자

Kailash Vaviya 2024년2월15일
  1. 널 안전의 개념
  2. Null 안전 연산자 ? 코틀린에서
  3. Null이 아닌 어설션 !! Kotlin의 연산자
차이점!! 그리고 ? Kotlin의 연산자

Kotlin에서 어설션 연산자 !! 및 안전 호출 연산자 ? 널 안전으로 작업하십시오.

이 문서에서는 null 안전의 개념을 소개합니다. !! 방법도 살펴보겠습니다. 그리고 ? Kotlin에서는 null 안전을 지원합니다.

널 안전의 개념

Kotlin의 유형 시스템은 null 참조 문제를 제거하는 것을 목표로 합니다. 문제는 null 개념이 있는 많은 프로그래밍 언어에서 null 참조 멤버에 액세스하면 예외가 발생한다는 것입니다.

Kotlin에서는 이 예외를 NullPointerException 또는 NPE라고 합니다. Kotlin의 유형 시스템은 null 안전을 통해 null 참조 문제를 극복하는 것을 목표로 합니다.

시스템은 null 참조를 보유할 수 있는 참조와 보유할 수 없는 참조를 구별합니다. 예를 들어 표준 문자열 변수는 null을 보유할 수 없지만 String?을 보유할 수 있습니다. 할 수 있다.

다음은 동일한 것을 보여주는 예입니다.

첫 번째 예에서는 null이 아닌 참조를 의미하는 표준 변수를 사용합니다.

fun main() {
    var s: String = "Hello" // Regular initialization means a non-null value
    println(s)
}

출력:

일반 초기화 변수

표준 변수와 함께 null을 사용하려고 하면 오류가 발생합니다.

fun main() {
    var s: String = null
    println(s)
}

출력:

Null 값이 있는 일반 초기화 변수

두 번째 예에서는 String?을 사용하며 null일 수 있습니다.

fun main() {
    var s: String? = null // we can set this to null
    print(s)
}

출력:

끈? Null 값이 있는 변수

보시다시피 String? null을 보유할 수 있습니다. 따라서 표준 변수 초기화인 경우 Kotlin의 유형 시스템은 null 값이 없음을 이해할 수 있습니다.

따라서 NPE에 대해 걱정하지 않고 이러한 참조를 빠르게 호출할 수 있습니다.

그러나 null을 보유할 수 있는 변수는 어떻습니까? 이러한 변수는 NPE 안전하지 않기 때문에 이러한 변수에 직접 액세스할 수 없습니다.

fun main() {
    var s: String? = null // we can set this to null
    print(s)

    val l = s.length // This throws error as 's' can be null
}

출력:

액세스 문자열? 변수 오류 발생

그렇다면 이러한 변수에 어떻게 액세스합니까? 그리고 답은 ?을 통해서입니다. 그리고 !! 연산자.

Null 안전 연산자 ? 코틀린에서

null 참조 멤버에 액세스하는 한 가지 방법은 ?의 도움을 받는 것입니다. 이 연산자를 사용하면 변수가 null이 아닌 경우 값을 반환하고 그렇지 않은 경우 null을 반환합니다.

이를 이해하기 위해 아래 예를 살펴보겠습니다.

첫 번째 예에서는 null이 아닌 값을 사용하고 길이를 가져옵니다.

예 1:

fun main() {
    var s: String? = "Hello"
    println(s)

    val l = s?.length
    print(l)
}

출력:

액세스 문자열? Null이 아닌 값을 가진 변수

이제 변수를 null로 초기화합니다.

예 2:

fun main() {
    var s: String? = null
    println(s)

    val l = s?.length
    print(l)
}

출력:

액세스 문자열? Null 값이 있는 변수

안전한 연산자 ? 체인 생성에도 도움이 됩니다.

예를 들어 회사의 직원을 생각해 보십시오. 그는 관리자 밑에서 일할 팀 리더가 있을 수 있습니다.

?를 사용할 수 있습니다. 다음과 같은 방법으로 체인을 만들고 David의 관리자 이름에 액세스합니다.

employeename?.teamleader?.manager?.name

위 구문을 다음과 같이 읽을 수 있습니다.

  • employeename이 null이 아닌 경우 부서를 반환합니다.
  • department가 null이 아닌 경우 관리자를 반환합니다.
  • manager가 null이 아닌 경우 이름을 반환합니다.

변수 중 하나라도 null인 경우 구문은 null을 반환합니다.

Null이 아닌 어설션 !! Kotlin의 연산자

null 참조 멤버에 액세스하는 또 다른 옵션은 !!를 사용하는 것입니다. 운영자. NPE 애호가를 위한 것입니다.

따라서 null이 아닌 참조 멤버에 액세스하여 NPE가 있는 경우 값을 제공하거나 그렇지 않으면 NPE를 발생시키려는 경우 Kotlin에서 이 연산자를 사용할 수 있습니다.

금고 ?에 대해 했던 것과 동일한 두 가지 예를 고려해 봅시다. null이 아닌 어설션 !!을 이해하는 연산자 운영자가 작동합니다.

예 1:

fun main() {
    var s: String? = "Hello"
    println(s)

    val l = s!!.length
    print(l)
}

출력:

액세스 문자열? Null이 아닌 어설션이 있는 변수 1

예 2:

fun main() {
    var s: String? = null
    println(s)

    val l = s!!.length
    print(l)
}

출력:

액세스 문자열? Null이 아닌 어설션이 있는 변수 2

Kailash Vaviya avatar Kailash Vaviya avatar

Kailash Vaviya is a freelance writer who started writing in 2019 and has never stopped since then as he fell in love with it. He has a soft corner for technology and likes to read, learn, and write about it. His content is focused on providing information to help build a brand presence and gain engagement.

LinkedIn

관련 문장 - Kotlin Operator