#8 [Kotlin] 널 안정성

정상준·2022년 10월 28일
0

kotlin

목록 보기
8/26
post-thumbnail

📝널 안정성

널이란 객체가 선언되었지만 초기화되지 않은 상태이다. 만약 주솟값을 가지지 못하고 널인 상태의 객체를 이용하면 널 포인트 예외가 발생한다. 널 포인트 예외는 널인 객체를 이용할 수 없다는 오류이다. 이때 널 안정성이란 널 포인트 예외가 발생하지 않도록 코드를 작성하는 것을 말한다.

fun main{
   var data : String? = null
   println("data length : ${data?.length ?: 0}")
}

data가 null이면 0을 반환하고 null이 아니면 length를 이용해 문자열의 개수를 얻는 소스이다.

이렇게 함으로써 널일 경우 안정성을 보장받을 수 있다.

널 안정성 호출 - ?. 연산자

널 불허로 선언한 변수는 null을 대입할 수 없으므로 널 포인트 예외를 신경 쓸 필요는 없지만 널 허용으로 선언한 변수는 null을 대입할 경우 얼마든지 널 포인트 예외가 발생할 수 있다. null이 대입될 수 있는 변수를 널 안전성을 고려하지 않고 작성하면 오류가 발생한다.

따라서 널 허용으로 선언한 변수의 멤버에 접근 할 때는 반드시 ?.연산자를 이용해야 한다.

?.연산자는 변수가 null이 아니면 멤버에 접근하지만 null이면 멤버에 접근하지 않고 null반환

val data : String? = "kkang"
val length = data?.length

엘비스 ㅡ ?: 연산자

?: 연산자는 변수가 널이면 널을 반환한다. but 변수가 널일 때 대입해야 하는 값이나 실행 할 구문이 있을수도 있는데 이때 사용한다.

fun main(){
    var data : String? = "kkang"
    println("data : $data : ${data?.length ?: -1}")
    data = null
    println("data : $data : ${data?.length ?: -1}")
}

예외 발생 ㅡ !! 연산자

!!는 객체가 널일 때 예외를 일으키는 연산자로 널 포인트 예외를 발생시켜야 할 때 사용한다

fun some(data : String?) : Int{
      return data!!.length
}

fun main(){
     println(some("kkang"))
     println(some(null))
}

출력 : 5
Exception in thread "main" java.lang.NullPointerException

profile
안드로이드개발자

0개의 댓글