Study Record

[Kotlin] null safety 본문

안드로이드/Kotlin

[Kotlin] null safety

초코초코초코 2023. 7. 11. 19:54
728x90

 

😶 Null safety

Kotlin 에는 많은 프로그래밍 언어에서 발생하는 NullPointerException 줄여서 NPE 가 발생하는 것을 방지하기 위한 기술이 포함되어 있다.

 

Kotlin 에는 null 을 포함하냐 포함하지 않냐에 따라 변수의 데이터 타입을 정할 수 있다. null 을 포함하는 변수를 만들면 말 그대로 null 을 포함할 수 있고 null 을 포함하지 않은 변수를 만들면 절대로 null 이 될 수 없다.

 

선언하는 방식은 "?" 기호를 데이터 타입에 붙이면 null 을 포함하게 되고 "?" 기호를 붙이지 않으면 null 을 포함하지 않은 변수를 뜻한다. 

var a : String? = null
var b : Int = 5

 

 

😶 null 일 경우 실행하지 않음(?.)

클래스의 멤버 변수를 불러오거나 멤버 함수를 실행할 때 인스터스 정보를 담고 있는 변수가 null 을 포함하고 있다면 그대로 실행한다면 NPF 오류가 생길 수 있다. 이럴 때 "?." 를 사용하면 지금 변수가 null 이 아닐 경우에만 실행한다.

val s: Int? = 5
s?.toString()
s?.absoluteValue

 

 

😶 null 인지 아닌지 체크하기

null 이 포함된 변수는 값이 null 일수도 있는 가능성이 항상 존재한다. 따라서 항상 변수가 값이 null 인지 아닌지 확인해야 한다.

var b : String? = "fdsf"

val l: Int = if(b != null) b.length else -1 

// Elvis Operator
val El: Int = b?.length ?: -1

 

 

😶 강제로 시행하기(!!)

!! operator 를 붙이면 실행하려는 변수가 null 인지 아닌지 관계없이 무조건 실행한다. 따라서 NPF 오류가 발생할 가능성이 있다. 확실히 null 이 아닐경우에만 사용해야 한다.

val b: String? = "fdsdfq"

val l = b!!.length

 

 

😶 let (scope functions)

inline fun <T, R> T.let(block: (T) -> R): R

let 이라는 inline 함수를 사용하면 해당 변수가 null 이 아닌 경우에만 let 블록 안의 내용을 실행한다.

val b: String? = "erwer"

b?.let { it ->
    // it = erwer
    println(it)
}

 

 

 

 

Null safety | Kotlin

 

kotlinlang.org

 

 

728x90