References: Do it! 코틀린 프로그래밍
Null을 허용하는 변수 설정과 NullPointerException(NPE)을 방지하는 법에 대해 알아봅니다
1. Null을 허용하는 변수 설정하기.
코틀린에서는 기본적으로 변수에 NULL값을 허용하지 않습니다.
위와 같이 String 타입 변수에 null을 넣으려고 하면 에러를 반환합니다.
직접 null을 할당하려면 다음과 같이 해야합니다.
1. 명시적으로 자료형을 선언해줘야 하며
2. NULL을 허용한다는 의미로 ? 를 자료형 뒤에 입력해줘야 합니다.
2. 세이프 콜
위의 예시에서 value의 길이를 구해봅시다.
세이프 콜 (?.)이나 non-null(!!.)만 허용한다는 에러를 확인할 수 있습니다.
세이프 콜이란 null이 할당되어 있을 가능성이 있는 변수를 검사하여 안전하게 호출하도록 도와주는 기법입니다.
이번엔 세이프콜을 적용하여 길이를 구해봅시다.
fun main() {
var value:String? = "Hello kotlin"
value = null;
var length = value?.length
println(length);
}
실행하면 결과가 어떻게 나오나요?
세이프 콜은 변수를 검사 한후 값이 있으면 길이를, 값이 null이면 null을 출력합니다. 위의 코드를 실행하면 null이 출력될 것 입니다.
3. non-null 단정 기호.
이번엔 non-null 단정기호인 !!.을 사용해 봅시다.
코드를 아래와 같이 수정한 후 실행해봅니다.
fun main() {
var value:String? = "Hello kotlin"
value = null;
var length = value!!.length
println(length);
}
물론 컴파일러에서 에러를 보여주긴 합니다.
그러나 정상적으로 컴파일은 되고 실행하면 NPE가 발생합니다.
Exception in thread "main" kotlin.KotlinNullPointerException
4. 조건문을 활용한 변수 검사
기본적으로 조건문을 사용해 변수의 null 가능성을 검사할 수도 있습니다.
fun main() {
var value:String? = "Hello kotlin"
value = null;
val length = if(value != null) value.length else -1
println(length);
}
5. 세이프 콜과 엘비스(Elvis)를 사용한 변수 검사.
세이프 콜(?.)과 엘비스 연산자(?:)를 함께 사용하면 좀 더 안전하게 변수를 검사할 수 있습니다.
fun main() {
var value:String? = "Hello kotlin"
value = null;
val length = value?.length ?: -1
println(length);
}
결과값은 -1을 출력합니다.
"value?.length ?: -1"에 대해 알아봅시다.
세이프 콜인 value?.length는 위에서 살펴본 바와 같이 null을 리턴합니다.
엘비스 연산자는 좌측의 값이 null이면 우측의 값을 리턴하고, null이 아니면 좌측의 값을 그대로 리턴합니다.
따라서 null ?: -1이므로 -1을 리턴하게 됩니다.
'Programming' 카테고리의 다른 글
[Kotlin] 09. 함수의 선언과 간략화 (0) | 2019.08.21 |
---|---|
[Kotlin] 08. 스마트 캐스트 (0) | 2019.08.21 |
[Kotlin] 06. 자료형 String (0) | 2019.08.21 |
[Kotlin] 05. 변수 선언과 자료형 (0) | 2019.08.21 |
[Kotlin] 04. 사용자 클래스 사용하기. (0) | 2019.08.21 |