[Kotlin] null 값을 처리하는 방법, 동일여부 확인 설명 & 예제

728x90

nullable 변수에서 null을 처리하는 법

  • nullable 변수
    var sample: String? = null

But null상태로 속성이나 함수를 쓰려고 하면 -> null pointer exception 발생 (null 인 객체를 참조하면 발생하는 오류)

var sample: String? = null
if (sample != null)
    println(sample.toUpperCase())

위와 같은 null Check 필요

?.

null safe operator
sample?.toUpperCase()
참조연산자를 실행하기 전에 먼저 객체가 null 인지 확인부터 하고 객체가 null이라면 뒤의 구문을 실행하지 않는 연산자 이다.

?:

elvis operator
sample?:"default"
객채가 null이 아니라면 그대로 사용하지만 null이라면 우측의 객체로 대체됨

!!.

non-null assertion operator
sample!!.toUpperCase()
참조 연산자를 사용할 때 null여부를 컴파일시 확인하지 않도도록 하여 런타임시 null pointer exception이 나도록 의도적으로 방치하는 연산자

var a: String? = null

println(a?.toUpperCase())

println(a?:"default".toUpperCase())

println(a!!.toUpperCase())

 

스코프 함수와 함께 사용

var a: String? = null

//스코프 함수와 같이 사용하면 편리
//null인경우 스코프 전체가 실행되지 않음
a?.run {
    println(toUpperCase())
    println(toLowerCase())
}

var b: String? = "Kotlin Exam"

//null을 체크하기 위해 if문 대신 사용하면 상당히 편리할 수 있다
b?.run {
    println(toUpperCase())
    println(toLowerCase())
}

변수간의 동일성 확인하는 법

  1. 내용의 동일성
    • 다른 객체더라도 내용만 같으면 동일하다고 판단
    • a == b
    • equals 함수의 Boolean 값으로 판단
  2. 객체의 동일성
    • 메모리상의 같은 객체를 가리키고 있을때만 동일하다고 판단
    • a === b
fun main() {
    var a = Product("콜라", 1000)
    var b = Product("콜라", 1000)
    var c = a
    var d = Product("사이다", 1000)

    println(a == b)
    println(a === b)

    println()

    println(a == c)
    println(a === c)

    println()

    println(a == d)
    println(a === d)
}

class Product(val name: String, val price: Int) {
    override fun equals(other: Any?): Boolean {
        if (other is Product) {
            return other.name == name && other.price == price
        } else {
            return false
        }
    }
}

 

728x90

댓글

Designed by JB FACTORY