728x90
반응형
null check
null 상태로 속성이나 함수를 쓰려고 하면 null pointer exception이 발생하기 때문에 nullable 변수를 사용할 때 null 체크 없이 코드가 컴파일 되지 않는다.
var sample: String? = null
if(sample != null)
println(sample.toUpperCase())
null 체크를 하기 위해 일일히 if문으로 조건을 체크하는 대신 좀 더 편리한 방법?
- ?. (null safe operator) : 참조연산자를 실행하기 전에 먼저 객체가 null인지 확인부터 하고 객체가 null이라면 뒤따라오는 구문을 실행하지 않는다. sample?.
toUpperCase() - ?: (elvis operator) : 객체가 null이 아니라면 그대로 사용하지만 null이라면 연산자 우측의 객체로 대체된다. sampe?:”default” → sample이 null이니까 대신 “default”를 써야겠다!
- !!: (non-null assertion operator) : 참조연산자를 사용할 때 null 여부를 컴파일 시 확인하지 않도록 하여 런타임 시 null pointer exception이 나도록 의도적으로 방치한다.
var a: String? = null
println(a?.toUpperCase()) // nul
println(a?:"default".toUpperCase()) // DEFAULT
println(a!!.toUpperCase()) // Exception in thread ... (에러 나고 프로그램 중단)
null safe 연산자는 스코프 함수와 사용하면 더욱 편리하다!
var a: String? = null
a?.run{ // 전체 실행 X
println(toUpperCase())
println(toLowerCase())
}
var b: String? = "Kotlin Exam"
b?.run{
println(toUpperCase()) // KOTLIN EXAM
println(toLowerCase()) // kotlin exam
}
변수의 동일성 check
- 내용의 동일성 : 메모리상에 서로 다른 곳에 할당된 객체라도 내용이 같다면 동일하다고 판단 (a == b )
- 객체의 동일성 : 서로 다른 변수가 메모리상에 같은 객체를 가리키고 있을 때만 동일하다고 판단 (a === b )
내용의 동일성은 자동으로 판단되는 것이 아닌 코틀린의 모든 클래스가 내부적으로 상속받는 ‘Any’라는 최상위 클래스의 equals() 함수가 반환하는 Boolean 값으로 판단하게 된다.
기본 자료형에는 자료형의 특징에 따라 equls() 함수가 이미 구현되어 있지만 커스텀 class를 만들 때는 동일성을 확인해주는 구문을 별도로 구현해야 한다.
fun main(){
var a = Product("콜라", 1000)
var b = Product("콜라", 1000)
var c = a
var d = Product("사이다", 1000)
println(a == b) // true
println(a === b) // false
println(a == c) // true
println(a === c) // true
println(a == d) // false
println(a === d) // false
}
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
반응형
'Language > Kotlin' 카테고리의 다른 글
[Kotlin] 중첩클래스와 내부클래스 (0) | 2023.09.20 |
---|---|
[Kotlin] 함수의 다양한 기능 (0) | 2023.09.20 |
[Kotlin] 문자열 함수 (0) | 2023.09.18 |
[Kotlin] 컬렉션(1) 리스트 (0) | 2023.09.18 |
[Kotlin] 제너릭 (0) | 2023.09.17 |