본문으로 바로가기

Kotlin에서의 null체크

  • 코틀린에서는 null이 가능한 타입을 완전히 다르게 취급한다.

fun startWithA(str: String): Boolean{ // null이 불가능하므로 바로 startsWith 바로 호출
    return str.startsWith("A");
}
fun startWithA(str: String?): Boolean{ //?표기로 Null 기능성이 있으므로 오류 
    return str.startsWith("A");
}
  • 이미 Null 체크가 된 변수는 녹색으로 표기해준다.

Safe Call 과 Elvis 연산자

  • null이 가능한 타입만을 위한 기능 제공
  • Safe Call : .?null이 아닐경우만 실행, null일 경우 실행하지 않고 null반환
/** safe call */
var str : String? = "ABC"
str?.length // str이 null이 아닐때만 실행
//str.length  ERROR!! - str이 null일 수도 있어 오류 발생
//Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?
  • Elvis 연산자 : 앞의 연산 결과가 null이면 뒤의 값을 사용
    • early return validation에도 사용할 수 있다.
/** Elvis 연산자 */
val str : String? = dnull
str?.length?:0 // 앞의 연산 결과가 null이면 뒤의 값(0) 사용

/** earyly return 활용 */ 
number?: return 0  //if(number == null) return 0; java

널 아님!! 단언

  • !! 를 사용하여 null이 아님!!을 컴파일러에게 알려줄 수 있다.
  • nullable type이지만, Null이 될 수 없는 필드들 일 경우 사용
  • 만약 null이 들어오면 컴파일 에러는 안나지만 RunTime시점에 NPE가 날수는 있음.
/** nuLl아님! 단언 */
fun startWithA(str: String?): Boolean{
    return str!!.startsWith("A");  // !!단언 사용
}

println(startWithA("AB")) // 정상처리 
println(startWithA(null)) // NPE 발생

플랫폼 타입

  • 코틀린에서 null 관련 정보를 알 수 없는 경우 Runtime시 Exception이 날 수 있는데 이를플랫폼타입이라고 함
  • Kotlin 코드에서 Java 코드를 사용할 경우 Null에 대한 정보를 명시해 줘야함
  • @NotNull @Nullable org.jetbrains.annotations
  • Java 라이브러리 등을 사용할 경우 Null 가능성을 확인하고 코틀린으로 랩핑해서 사용하는 것을 권장한다.
public class Person {

    private String name;
    public Person(String name) {
        this.name = name;
    }
    @Nullable //@NotNull
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

fun startWithA(str: String?): Boolean{
    return str!!.startsWith("B"); 
}

val person = Person("지훈")
startWithA(person.name)  // @Nullable 필드이므로 컴파일 오류 발생

Reference

 

자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide) - 인프런 | 강의

이 강의를 통해 Kotlin 언어의 특성과 배경, 문법과 동작 원리, 사용 용례, Java와 Kotlin을 함께 사용할 때에 주의할 점 등을 배울 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com