테크과학! DiMo
개발 환경: play.kotlinlang.org
?.
null safe operator
참조 연산자를 실행하기 전에 먼저 객체가 null인지 확인부터하고
객체가 null이라면 뒤따라 오는 구문을 실행하지 않음
ex) sample?.toUpperCase()
sample이 null이면 toUpperCase()를 실행하지 않음
?:
elvis operator
객체가 null이 아니라면 그대로 사용하지만 null이면
연산자 우측의 객체를 사용한다.
ex) sample?:"default"
sample이 null 이니까 대신 "default"를 사용
!!.
non-null assertion operator
참조 연산자를 사용할 때 null 여부를 컴파일 시 확인하지 않도록 하여
runtime시 NPE가 나도록 의도적으로 방치하는 연산자
fun main() {
var a: String? = null
println(a?.toUpperCase())
println(a?:"default".toUpperCase())
println(a!!.toUpperCase())
}
null safe 연산자는 스코프 함수와 사용하면 편리하다.
fun main() {
var a: String? = null
a?.run {
println(toUpperCase())
println(toLowerCase())
}
}
Output:
scope 함수 전체가 수행되지 않음
fun main() {
var a: String? = "Kotlin Exam"
a?.run {
println(toUpperCase())
println(toLowerCase())
}
}
Output:
KOTLIN EXAM
kotlin exam
null을 체크하기 위해 if문 대신 사용하면 편리한 기능
변수의 동일성
1. 내용의 동일성
메모리 상의 서로 다른 곳에 할당된 객체라고 해도 그 내용이 같으면 동일하다고 판단하는 것
== 연산자를 사용
2. 객체의 동일성
서로 다른 변수가 메모리 상의 같은 객체를 가리킬 때만 동일하다고 판단하는 것
===연산자
내용의 동일성은 자동으로 판단되는 것이 아닌 코틀린의 모든 클래스가 내부적으로 상속받는
Any라는 최상위 클래스에 equals() 함수가 반환하는 boolean 값으로 판단하게 된다.
기본 자료형에는 자료형의 특징에 따라 equals() 함수가 이미 구현되어 있지만 커스텀 class를 만들 때는
equals를 상속받아 동일성을 확인해주는 구문을 별도로 구현해야 한다.
fun main() {
var a = Product("콜라", 1000)
var b = Product("콜라", 1000)
var c = a
var d = Product("사이다", 1000)
println("a == b : " + (a == b).toString())
println("a === b : " + (a === b).toString())
println("a == c : " + (a == c).toString())
println("a === c : " + (a === c).toString())
println("a == d : " + (a == d).toString())
println("a === d : " + (a === d).toString())
}
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
}
}
}
Output:
a == b : true
a === b : false
a == c : true
a === c : true
a == d : false
a === d : false
'Kotlin > 기본 문법' 카테고리의 다른 글
코틀린 강좌 #23 중첩클래스와 내부클래스 (0) | 2020.12.24 |
---|---|
코틀린 강좌 #22 함수의 argument를 다루는 방법과 infix 함수 (0) | 2020.12.24 |
코틀린 강좌 #20 문자열을 다루는 법 (0) | 2020.12.20 |
코틀린 강좌 #19 리스트 (0) | 2020.12.20 |
코틀린 강좌 #18 제너릭 (0) | 2020.12.19 |