개발/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