[Google Compose Camp] Unit 2 연산자

hyihyi·2022년 12월 29일
0

Kotlin에서 null 허용 여부 사용

👆? 연산자 -> null 허용

fun main() {
    val favoriteActor = null
    println(favoriteActor)
}
>> null
fun main() {
    var favoriteActor: String = "Sandra Oh"
    favoriteActor = null
}

Kotlin에서 null을 허용하는 변수를 선언하려면 유형 끝에 ? 연산자를 추가해야 합니다. 예를 들어 String? 유형은 문자열이나 null을 보유할 수 있는 반면 String 유형은 문자열만 보유할 수 있습니다. null을 허용하는 변수를 선언하려면 null을 허용하는 유형을 명시적으로 추가해야 합니다. null을 허용하는 유형이 없으면 Kotlin 컴파일러는 null을 허용하지 않는 유형이라고 추론합니다.

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

    favoriteActor = null
    println(favoriteActor)
}
>> Sandra Oh
   null

👆?. 연산자->: null 허용하는 연산자에 안전 액세스

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

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

null을 허용하는 변수의 길이를 물어보면 null일 수도 있기 때문에 에러가 뜬다!


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

👆!!연산자 -> 변수의 값이 null이 아님(실제 여부에 관계없이)을 어설션함

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

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

null이 아닐 때는 정상 작동

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

null일 때 발생하는 NullPointerException 오류

fun main() {
    var favoriteActor: String? = null
    println(favoriteActor!!.length)
}

📢!!어선셜 연산자를 썼는데 null이 나오면 에러가 나기 때문에 null이 아님이 확실하지 않다면 !! 어설션 연산자를 사용하지 않는 것이 좋습니다.

👆?: Elvis 연산자 -> ?. 안전 호출 연산자가 null을 반환할 때 기본값을 추가할 수 있음

?: Elvis 연산자는 ?. 안전 호출 연산자와 함께 사용할 수 있는 연산자입니다. ?: Elvis 연산자를 사용하면 ?. 안전 호출 연산자가 null을 반환할 때 기본값을 추가할 수 있습니다.

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

    val lengthOfName = favoriteActor?.length ?: 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.

만약 favoriteActor 를 null로 바꾸면
The number of characters in your favorite actor's name is 0이라고 나온다

profile
자유롭게 쓴 나의 자유로운 Development voyage⛵

0개의 댓글