Kotlin에서 null은 1급 시민입니다. 즉, 모든 유형의 변수에 할당할 수 있는 적법한 값입니다. 그러나 이로 인해 코드가 null 값에 액세스하려고 시도할 때 null 포인터 예외가 발생할 수 있습니다.
1. Null 허용 유형: Kotlin에서는 유형에 '?'를 추가하여 변수를 null 허용으로 표시할 수 있습니다. 이는 변수가 null일 수 있음을 컴파일러에 알리고 null 값을 명시적으로 처리하도록 합니다.
ex).
val name: String? = null // variable 'name' can be null
if (name != null) {
println("Hello, $name")
} else {
println("Name is null")
}
2. 안전한 호출 연산자: 안전한 호출 연산자인 ?.를 사용하면 null이 아닌 경우에만 메서드를 호출하거나 개체의 속성에 액세스할 수 있습니다. 객체가 null이면 표현식은 null로 평가되고 나머지 체인은 건너뜁니다.
ex).
val str: String? = "Hello"
val length: Int? = str?.length // 'length' is null if 'str' is null
3. Elvis 연산자: Elvis 연산자 ?:를 사용하면 표현식이 null인 경우 사용할 기본값을 제공할 수 있습니다. 표현식이 null이 아닌 경우 해당 값이 사용됩니다. 그렇지 않으면 기본값이 사용됩니다.
ex).
val name: String? = null
val length = name?.length ?: -1 // if 'name' is null, use -1 as the length
4. 널이 아닌 어설션 연산자: 널이 아닌 어설션 연산자 !!를 사용하면 컴파일러가 널이라고 생각하더라도 표현식이 널이 아님을 어설션할 수 있습니다. 이는 변수가 null이 아님을 확실히 알고 있지만 컴파일러가 이 정보를 유추할 수 없는 경우에 유용합니다.
ex).
val str: String? = "Hello"
val length: Int = str!!.length // 'length' is guaranteed to be non-null
5. 안전한 캐스트: 안전한 캐스트 'as?'를 사용하면 객체를 특정 유형으로 캐스트할 수 있지만 객체가 해당 유형이 아닌 경우 null을 반환합니다. 이는 특정 유형일 수도 있고 아닐 수도 있는 객체로 작업할 때 유용할 수 있습니다.
ex).
val obj: Any? = "Hello"
val str: String? = obj as? String // 'str' is null if 'obj' is not a String
'코틀린' 카테고리의 다른 글
UI 디자인, 레이아웃 및 활동을 포함하여 Android 앱 개발에 Kotlin을 사용하는 방법 (0) | 2023.06.26 |
---|---|
코루틴을 활용한 비동기 프로그래밍 기초: 예제를 통한 병렬 작업 이해 및 실행 (0) | 2023.06.26 |
목록, 맵, 세트, 반복자를 포함하여 Kotlin의 컬렉션 프레임워크를 사용하는 방법 (0) | 2023.04.12 |
고차 함수, 람다 및 함수형 프로그래밍 개념에 대한 Kotlin의 지원 (0) | 2023.04.12 |
Kotlin의 클래스, 객체, 상속 및 다형성 (0) | 2023.04.12 |
댓글