코틀린에서는 null이 가능한 타입을 완전히 다르게 취급한다.
그래서 null이 가능한 타입만을 위한 기능이 존재한다.
한 번 null 검사를 하면 not-null 임을 컴파일러가 알 수 있다.
Safe Call : null이 아니면 실행하고 null이면 실행하지 않는다. (그대로 null)
val str: String? = "ABC"
str.length // 불가능
str?.length // 가능
Elvis 연산자 : 앞의 연산 결과가 null이면 뒤의 값을 사용
val str: String? = "ABC"
str?.length ?: 0
널 아님 단언 : nullable 타입이지만, 아무리 생각해도 null이 될 수 없는 경우
fun startsWithA1(str: String?): Boolean {
return str!!.startsWIth("A")
}
플랫폼 타입 : 코틀린이 null 관련 정보를 알 수 없는 타입. Runtime 시 Exception이 날 수 있다. 자바에서 @Nullable이나 @NotNull 어노테이션을 사용해서 null 관련 정보를 코틀린에게 전달해야 한다.
Byte
Short
Int
Long
Float
Double
부호 없는 정수들
val number1: Int = 4
val number2: Long = number1.toLong()
println(number1 + number2)
val number1: Int? = 3
val number2: Long = number1?.toLong() ?: 0
fun printAgeIfPerson(obj: Any) {
if (obj is Person) {
val person = obj as Person
println(person.age)
}
}
fun printAgeIfPerson(obj: Any) { // 스마트 캐스트
if (obj is Person) {
println(obj.age)
}
}
fun printAgeIfPerson(obj: Any?) { // nullable
val person: Person? = obj as? Person
println(person?.age)
}
Any
Unit
Nothing
data class Money (
val amount: Long
) {
operator fun plus(other: Money): Money {
return Money(this.amount + other.amount)
}
}
참고