Kotlin/Kotlin 이론

Kotlin 이론 5 ) 코틀린 Null 안정성 특징

kimc 2022. 8. 30. 20:48

```

Kotlin 코틀린 Null 안정성 특징

```

이번 글을 통해 배워갈 내용

  1. Kotlin 코틀린 Null 안정성 특징

NPE

Kotlin type system에서는 Null reference를 제거하는데 큰 노력을 함
NPE는 Null Pointer Exception의 약자임

 

일반적인 경우 Null
Kotlin 에서 일반적으로 변수는 null 할당이 안됨
예) Null can not be a value of a non-null type String

 

nullable

null 을 할당하려면 String? 같이 표현해서 nullable 하게 해주어야 함

 

Safe calls 

Safe calls 를 사용할 경우
?. null 이면 null 을 반환하고 아닌 경우 의도한 값을 반환합니다
Chain으로 사용하면 더 유용합니다
 예 ) kimc?.company?.ace?.name
김 씨가 회사에 다닐 수도 있고 김 씨가 에이스일 수도 있고....

하나라도 null 이면 null 입니다

 

non null 값을 가지고만 연산을 실행하고 싶은 경우
fun case05() {
    val strAndNulls: List<String?> = listOf("Kotlin", null)
    for (item in strAndNulls) {
        item?.let { print(item) }
    }
}

rhs 대신 lhs에도 사용가능합니다
lhs 에 있는 게 하나라도 null 이면 메서드는 실행되지 않습니다.
fun case06() {
    // kimc?.company?.ace?.name = AcePool.getManager()
}

 

Elvis 연산자
Elvis 연산자를 써서
if 문 대신에 짧은 식으로 변경 가능
전 // val l:Int = if (b != null) b.length else -1
후 // val l = b?.length?: -1
throw 에도 사용 가능
fun case07(b : String) {
    // val l:Int = if (b != null) b.length else -1
    // val l = b?.length?: -1
}

Collection에서 nullable type 만 제외하는 것도 가능
fun case08(){
    val nullableList : List<Int?> = listOf(1, 2, null, 4)
    val intList: List<Int> = nullableList.filterNotNull()
}

 

SafeCast
SafeCast 도 유용함

실패시 null을 반환
fun case09() {
    val a = "1"
    val aInt: Int? = a as? Int
}

 

// Kotlin type system 에서는 Null reference 를 제거하는데 큰 노력을 함
// NPE 는 Null Pointer Exception 의 약자임

// Kotlin 에서 일반적으로 변수는 null 할당이 안됨
fun case01() {
    var a: String = "하이"
    // a = null // Null can not be a value of a non-null type String
}

// null 을 할당하려면 String? 같이 표현해서 nullable 하게 해주어야 함
fun case02() {
    var a: String? = "하이"
    a = null
}

// null이 할당된 후 변경되지 않았다면
// 명시적으로 b 가 null이 아닌 것을 확인 가능
fun case03() {
    var b: String? = null
    val l = if (b != null) b.length else -1
}

// Safe calls 를 사용할 경우
// ?. null 이면 null 을 반환하고 아닌 경우 의도한 값을 반환합니다
// Chain 으로 사용하면 더 유용합니다
// 예 ) kimc?.company?.ace?.name
// 김씨가 회사에 다닐수도 있고 김씨가 에이스일수도 있고 ....
// 하나라도 null 이면 null 입니다
fun case04() {
    val a = "Kotlin"
    val b: String? = null
    println(b?.length)
    println(a?.length)
}

// non null 값을 가지고만 연산을 실행하고 싶은 경우
fun case05() {
    val strAndNulls: List<String?> = listOf("Kotlin", null)
    for (item in strAndNulls) {
        item?.let { print(item) }
    }
}

// rhs 대신 lhs 에도 사용가능합니다
// lhs 에 있는게 하나라도 null 이면 메서드는 실행되지 않습니다.
fun case06() {
    // kimc?.company?.ace?.name = AcePool.getManager()
}

// Elvis 연산자를 써서
// if 문 대신에 짧은 식으로 변경 가능
// 전 // val l:Int = if (b != null) b.length else -1
// 후 // val l = b?.length?: -1
// throw 에도 사용가능
fun case07(b : String) {
    // val l:Int = if (b != null) b.length else -1
    // val l = b?.length?: -1
}

// Collection에서 nullable type 만 제외하는 것도 가능
fun case08(){
    val nullableList : List<Int?> = listOf(1, 2, null, 4)
    val intList: List<Int> = nullableList.filterNotNull()
}

// SafeCast 도 유용함
fun case09() {
    val a = "1"
    val aInt: Int? = a as? Int
}

fun example05() {
    println("example05")
    case01()
    case02()
    case03()
    case04()
    case05()
    case06()
    case07("hi")
    case08()
    case09()
}

fun main(args: Array<String>) {
    example05()
}
// https://kotlinlang.org/docs/null-safety.html#the-operator

 


 

 

 

 

 

읽어주셔서 감사합니다

 

무엇인가 얻어가셨기를 바라며

 

오늘도 즐거운 코딩 하시길 바랍니다 ~ :)

 

참조 및 인용


https://kotlinlang.org/docs/null-safety.html

 

Null safety | Kotlin

 

kotlinlang.org


 

 

728x90