kotlin

Kotlin null 처리

slow333 2023. 1. 14. 12:00

24. Null 처리

    nullable 변수 만들기

var sample : String?=null

·    null 객체를 참조하면 애러 발생 : null pointer exception

null safe operator

    참조 연산자를 실행하기 전에 객체가 null 인지 확인하고 객체가 null 이면 null 반환

?. sample?.toUpperCase()

elvis operator

    객체가 null 아니면 그대로 사용, null이면 연산자 우측의 연산자를 대체해서 수행

?: sample?: “default”

non-null assertion operator

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

-------------------------------------------------

fun main () {

    var s : String?=null

    println(s?.uppercase())

    println(s?: printT().uppercase())

   

    s?.run {

        println(uppercase()) // 아무것도 안나옴

        println(lowercase()) // 아무것도 안나옴

    }

   

    var a : String? = "kotlin.TEST"

    a?.run {

        println(uppercase())

        println(lowercase())

    }

   

//     println(s!!.lowercase())

}

 

fun printT():String{

    return "Test Print for Null"

}

 

fun nullCheck(){

    var name = "yong"

    val uppercaseName = name.uppercase()

 

    // ?.   null 이면 null 반환 아니면 그냥 출력

    var nullName: String? = null

    val nullCheckNameUpperCase = nullName?.uppercase()

 

    println(nullCheckNameUpperCase)

 

    // ?: null 일때 출력 값을 지정

    var lastname: String? = "KIM"

    val fullname = name + "  , "+(lastname ?: "no lastname")

 

    println("나의 이름은 $fullname")

}

// !! 값이 절대 null 아니라고 강제로 지정

fun mNull(name: String?) {

    var uName = name!!.uppercase()

}

 

    내용의 동일성 : ==

    객체의 동일성(위치) : ===

-------------------------------------------------

fun main() {

    var a = Product("콜라", 1000)

    var b = Product("콜라", 1000)

    var c = a

    var d = Product("cider", 1000)

   

    println(a==b)

    println(a===b)

   

    println(a==c)

    println(a===c)

   

    println(a==d)

    println(a===d)

}

 

class Product(val name : String, var price : Int) {

    init {

        println("제품명 : ${this.name}, 가격 : ${this.price}")

    }

    override fun equals (other: Any?) : Boolean {

        if (other is Product){

            return other.name == name && other.price == price

        } else {

            return false

        }

    }   

}

// 자주 사용되니까 알아 두어야