티스토리 뷰

Programming/Kotlin

Kotlin Null Safety

Albothyl 2022. 4. 23. 12:57
//기본적으로 not null
var a: String = "abc" // Regular initialization means non-null by default
a = null // compilation error

//null이 들어올 수 있는 경우는 ? 으로 표현
var b: String? = "abc" // can be set to null
b = null // ok
print(b)

// 명확한 조건
val b: String? = "Kotlin"
if (b != null && b.length > 0) {
    print("String of length ${b.length}")
} else {
    print("Empty string")
}

// null이면 null을 표현
val a = "Kotlin"
val b: String? = null

println(a?.length) // null //Unnecessary safe call
println(b?.length) // 6

// chaining
bob?.department?.head?.name // chain 중 1개라도 null이라면 null

person?.department?.head = managersPool.getManager() // 왼쪽 chain이 모두 not null인 경우에만 오른쪽 값을 할당


// Elvis operator (?:)
val l = b?.length ?: -1 // 아래 코드와 동일한 역활을 한다.
val l: Int = if (b != null) b.length else -1

fun foo(node: Node): String? {
    val parent = node.getParent() ?: return null
    val name = node.getName() ?: throw IllegalArgumentException("name expected")
    // ...
}

// !! operator
val l = b!!.length //null이면 NPE 발생 아니면 b의 length를 l에 할당

// safe casts
val aInt: Int? = a as? Int

val a = 2
val aInt: Int? = a as? Int

val b = "2"
val bInt: Int? = b as? Int

println(aInt) // 2
println(aInt) // null

// collections of a nullable type
val nullableList: List<Int?> = listOf(1, 2, null, 4)
val intList: List<Int> = nullableList.filterNotNull() // 크기가 큰 list에서는 어떤 list 인지에 따라서 성능차이가 많이 발생할 수 있다.

'Programming > Kotlin' 카테고리의 다른 글

Kotlin Reflection  (0) 2022.04.30
Kotlin Generic  (0) 2022.04.30
Kotlin Loop  (0) 2022.04.23
Kotlin Conditions  (0) 2022.04.23
Kotlin Operator  (0) 2022.04.23
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함