[Kotlin] Android 톺아보기 2-3. null 처리

이소은·2022년 9월 14일
0

Android 기본기 잡기

목록 보기
5/9

​ 흔히 프로그래밍을 하다보면 정말 자주 접하는 오류가 null에 대한게 아닌가 싶다. null을 참조하는 순간 프로그램이 다운될 수 있기에, null 처리는 정말 중요한데, Kotlin은 null 처리에 많은 공을 들인 언어다.


null 값 할당하기 - ?

​ Kotlin의 기본 변수는 null을 입력할 수 없고, null을 입력하려면 변수 선언 시 타입 뒤에 ? 을 붙여야 한다.

var variable: String? = "Hello"
variable = null // 가능

var variable2: String = "Hello"
variable = null // error

위와 같이 변수 타입 뒤에 ?를 붙이지 않으면 null 값을 해당 변수에 입력할 수 없다. 또한, 변수에 null을 허용한 경우 null 체크를 아래와 같이 반드시 해야한다.

fun nullParameter(str: String?){
  if(str != null){ // str은 null이 허용되기에 반드시 체크가 필요
    var length2 = str.length
  }
}


Safe Call - ?.

​ null 체크를 보다 간단히 해보자. nullable인 변수 다음에 ?. 를 사용하면 해당 변수가 null일 경우 ?. 다음의 메서드나 property를 호출하지 않는다. Safe Call은 nullable한 변수를 nullPointException을 발생하지 않고 null이면 null 그대로를 반환해준다. 즉, null이 할당되어 있을 가능성이 있는 변수를 검사하여 안전하게 호출하도록 도와주는 기법이다.

fun testSafeCall(str: String?): Int?{
  var resultNull: Int? = str?.length // str이 null이면 뒤 코드 실행하지 않고 null반환, str이 null 이 아니면 safe call 이후의 코드 실행
  return resultNull
}



Elvis Operator - ?:

​ Elvis Operator는 변수가 null이면 ?: 의 오른쪽 식을 실행하고, null이 아니면 ?: 의 왼쪽 식을 그대로 실행하는 연산자다. 바로 위의 예시 코드를 엘비스 연산자로 고쳐보자.

fun testSafeCall(str: String?): Int{
  var resultNull: Int = str?.length?:0 // str이 null이면 0 반환, null이 아니면 str.length 반환 (if(str!=null) str.length else 0 과 동일)
  return resultNull
}



non-null - !!.

​ 이는 해당 변수가 null이 아니라고 단정하여 null 검사 없이 컴파일하며, null이 었다면 nullPointerException을 발생시키므로 주의해서 써야 한다.

var str1 : String? = null
var len = str1!!.length
println(len) // NullPointerException 발생



Reference

  • 이것이 안드로이드다 with Kotlin (고돈호 지음, 한빛미디어)
profile
안드로이드 개발자

0개의 댓글