Kotlin null 처리
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
}
}
}
// 자주 사용되니까 알아 두어야 함