개발/Kotlin

[Kotlin] 코틀린에서 Null 다루기

슥혁 2021. 6. 29. 20:51

코틀린에서의 Null 체크

# JAVA Null 처리
public boolean sw(String str) {
	if(str == null) return null
    return str.startsWith("A");
}

# Kotlin Null 처리
fun sw(str: String?): Boolean {
	if(str == null) return null
    return str.startsWith("A");
}

코틀린에서는 Null이 가능한 타입을 완전 다르게 취급한다 (끝에 물음표)

Safe Call과 Elvis 연산자

val str: String? = "ABC"

str.length  // 불가능
str?.length // 가능 -> [safe call]

println(str?.length); // str이 null인경우는 null이 찍힌다.
println(str?.length ?: 0); // str이 null인경우는 0이 찍힌다 [Elvis 연산자]

Not Null Field에 대한 단언

fun startsWithA(str: String?): Boolean {
	// Nullable 이지만.. 로직상 Not Null인 경우
	return str!!.startsWith("A"); // 느낌표 !! 를 붙혀서 사용한다
}

플랫폼 타입

@Nullable 
public String getName(){
	return name;
}

위 경우에서 @Nullable이 없다면 코틀린에서는 이 값이 Nullable인지 non-nullable인지 알 수가 없다.
플랫폼 타입, 즉 코틀린이 null 관련 정보를 알 수 없는 타입이며 런타임시 Exception을 발생시킬 수 있다.

 


최종정리
코틀린에서 Null이 들어갈 수 있는 타입은 완전히 다르게 간주됨
Null이 아닌경우에만 호출되는 Safe call(?.) 이 있음
Null인 경우에만 호출되는 Elvis 연산자(?:) 가 있음
Null이 절대 아닐때 사용할 수 있는 단언(!!) 
코틀린에서 Java 코드를 겸해서 사용할때는 플랫폼 타입 사용에 유의해야 한다.
Java 코드를 읽으며 Null 가능성을 확인하거나 코틀린에서 Wrapper