Kotlin Null
Java에서는 Compile Time에서 Null 처리하기 힘들다.
그 이유는 Reference Type에서는 Nullable 하기 때문에 Compile Time에서 알아채기는 매우 힘들다.
Java, Kotlin Null
그래서 Null일 경우 예외처리를 하는것이 보통이다.
String text = "Hello";
//Null Point Exception
if(text == null) {
throw new NullPointerException("text is null");
}
//Null Check
Boolean isNull = true;
if (text == null){
isNull = true;
} else {
isNull = false;
}
그럼 Kotlin에서는 뭐가 다를까?
먼저, 3개의 예시를 가지고 보려고 한다.
fun containsText(text: String): Boolean {
return text.contentEquals("hello")
}
fun containsText1(text: String?): Boolean {
return text.contains("hello")
}
fun containsTest(text: String?): Boolean {
if (text == null) {
return false
}
return text.contentEquals("hello")
}
먼저 제일 첫번째 예시를 보면
fun containsText(text: String): Boolean {
return text.contentEquals("hello")
}
Type 뒤에 아무것도 없다면 Kotlin은 Null값이 들어오지 않는 값이다. Nullable 하지 않는 값이라고 볼 수 있다.
text가 Null이 아니기에 Boolean이 Nullalble하지 않아도 Compile에서 에러가 나지 않는다.
두 번째 예시를 보면
fun containsText1(text: String?): Boolean {
return text.contains("hello")
}
text가 Nullable 하고 Return 타입이 Nullable 하지 않는다면 이 경우에 아래와 같은 Compile Error가 발생하게 된다.
Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?
3번째 예시를 보면
fun containsTest(text: String?): Boolean {
if (text == null) {
return false
}
return text.contentEquals("hello")
}
3번째 예시는 Null을 한번 검증하기 때문에 text가 Nullable하여도 Complie Error 없이 잘 실행된다.
Kotlin에서 Null 처리를 하는 방법
위에 에러를 다시 한번 보자
Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?
Safe 하거나 Non Null이라고 확인되어진 값만 허용된다는 것이다.
위에 에러를 통해 Kotlin에서 Null처리를 하는 2가지 방법을 알 수 있다.
- Safe Call / Elvis 연산자
- Assert Non Null
Safe Call / Elvis 연산자
이것은 JavaScript에 문법과 유사하다.
변수에 ?을 붙여 Null인 경우에는 해당 로직을 실행하지 않는 문법이다.
따라서 2번째 예시를 이렇게 변경할 수 있다.
fun containsText1(text: String?): Boolean {
return text?.let { return text.contentEquals("hello") } ?: false
}
- text가 null이 아니라면 Kotlin은 let을 실행시킬 것이다.
(여기서 let은 주어진 객체를 받아 블록내에서 실행시키고 반환하는 스코프 함수이다.) - ?:은 text가 null일 때 false를 반환하게 된다. -> Elvis 연산자
Complie 에러가 나던 것을 Safe Call을 통해 Null 처리를 하는 간단한 구조로 변경했다.
Assert Non Null
assert non null은 때려죽여도 이 변수는 Null이 들어갈 수 없을 단언 하는 것이다.
변수 뒤에!! 을 붙여 사용한다.
fun containsText1(text: String?): Boolean {
return text!!.contentEquals("hello")
}
이렇게 쓰게 되면 Compile Error는 나지 않지만 Runtime에서 NullPoinException이 발생하게 된다.
요약
- Kotlin에서는 타입 뒤에?을 붙여 Nullalble 한 타입으로 만들 수 있다.
- Kotlin에서 간단하게 Null처리를 하기 위해 Safe Call과 Elvis 연산자를 보통 쓴다.
Assert Non Null은 자주 쓰지는 않는다.
출처 :
https://www.inflearn.com/course/java-to-kotlin/dashboard
자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide) 강의 | 최태현 - 인프런
최태현 | 이 강의를 통해 Kotlin 언어의 특성과 배경, 문법과 동작 원리, 사용 용례, Java와 Kotlin을 함께 사용할 때에 주의할 점 등을 배울 수 있습니다., 요즘 대세인 코틀린을 공부하고 싶다면?⭐ J
www.inflearn.com
'Kotlin > Basic' 카테고리의 다른 글
Kotlin은 Java와 무엇이 다른가? (4) - 제어문 (1) | 2024.09.16 |
---|---|
Kotlin은 Java와 무엇이 다른가? (4) - 연산자 (1) | 2024.09.13 |
Kotlin은 Java와 무엇이 다른가? (3) - Type (0) | 2024.09.12 |
Kotlin은 자바와 무엇이 다른가? (1) - 변수 (0) | 2024.09.10 |
Kotlin Deep Dive 시작 (0) | 2024.09.10 |