App노자
[Kotlin] Null safety 본문
1. return문
fun main() {
var sTemp : String = null
// Null can not be a value of a non-null type String
}
코틀린의 가장 큰 특징 중 하나는 Null safety라고 생각한다
타입 시스템이 null이 허용 가능한 참조와 허용 불가능한 참조를 구분한다.
일반적인 String, int형은 null을 참조할 수 없으며 실제로 코드를 작성하면 위에 같은 오류 메시지가 나타난다
https://kotlinlang.org/docs/null-safety.html
Null safety | Kotlin
kotlinlang.org
fun main() {
var nullable : String? = null
}
변수에 null을 허용하려면 자료형 뒤에 ? 를 작성해야 한다
둘은 서로 다른 자료형이며 ?가 붙으면 nullable타입이 된다 Swift의 Optional(옵셔널) 타입과 유사하다
fun main() {
var nullable : String? = null
print(nullable.length)
// Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?
}
nullable타입에 접근을 하려고 NPE(NullPointerException) 관련 오류가 발생한다
별도의 처리를 해야 사용이 가능하다
fun main() {
var nullable : String? = null
var sTemp : String = "String"
sTemp = nullable!!
print(nullable!!.length)
}
non-null 단정기호 !!를 사용한 방법이다
null이 아니라고 선언을 해서 컴파일러가 null검사를 무시하지만 실행 중에 NPE가 발생한다
그리 좋은 방법은 아니라고 생각한다
fun main() {
var nullable : String? = null
var check = if(nullable != null) nullable.length else -1
print(check)
}
fun main() {
var nullable : String? = null
var check : String = "Test"
if (nullable != null && nullable.length > 0) {
check = nullable
print(check)
} else {
print("Empty string")
}
}
조건문을 활용해 null인지 아닌지 판단하고 그거에 맞는 처리를 하는 방식이다
null 상태를 검사하면 오류가 발생하지 않는다
fun main() {
var nullable : String? = null
var check = nullable?.length ?: -1
// null이면 ?: 를 실행, null이 아니면 ?.를 실행한다
println(check)
println(nullable?.length)
// 세이프콜( ?. ): 객체의 메서드를 호출할 때 멤버 연산자 앞에 "?"를 붙여 사용한다
// 값이 null이면 오류를 발생시키지 않고 그냥 null을 출력하고 다음 작업을 수행한다
println(nullable?:"Test")
// 엘비스 연산자( ?: ): 값이 존재할 때는 반환하지만 그렇지 않을 때는 뒤에 지정한 값을 반환한다
}
마지막 코드는 세이프콜과 엘비스 연산자를 사용하는 함께 사용하는 방법이다
null인 경우 엘비스 연산자에 의해 -1로 값을 대체하여 null을 대비할 수 있다
'Android > Kotlin' 카테고리의 다른 글
[Kotlin] 흐름 제어문과 예외 처리문 (0) | 2023.04.08 |
---|---|
[Kotlin] 조건문과 반복문 (0) | 2023.04.02 |
[Kotlin] 고차함수와 람다식 (0) | 2023.02.14 |
[Kotlin] 함수 (0) | 2023.01.27 |
[Kotlin] 변수와 자료형 (0) | 2023.01.24 |