널 참조의 위험성
- 자바를 포함한 많은 프로그래밍 언어에서 가장 많이 발생하는 유형이NullPointException 줄여서 NPE라고도 부른다.
- 자바에선 NPE를 줄이기위해 Optional을 지원 하기 시작했다.
- 자바의 Optional은 값을 래핑하기 때문에 객체 생성에 따른 호버헤드가 발생하고, 컴파일 단계에서 null 가능성을 검사하지 않는다.
- 코틀린을 비롯한 최신 언어에선 null 가능성을 컴파일러가 미리 감지해서 NPE 가능성을 줄일 수있다.
fun main() {
//컴파일 오류 val a : String = null
// var b : String = "aabbcc"
// b = null 컴파일 오류
var a : String? = null
println(a?.length) //null
var b: Int = if (a != null) a.length else 0
println(b) // null
//엘비스 연산자
//좌변이 null인 경우, 우변 값 반환
val c = a?.length ?: 0
println(c)
}
fun getNullStr(): String? = null
fun getLongthIfNotNull(str: String?) = str?.length ?:0
fun main() {
val nullableStr = getNullStr()
val nullableStrLength = nullableStr?.length ?: "문자길이".length
println(nullableStrLength) //4 (문자길이 반환해줌)
val length = getLengthIfNotNull(null)
println(length) //0 3line에 null이 아닌 경우 0을 출력하도록 되어있기에 0 출력
//throw NullPorinterException() //에러발생
val c: String? = null
val b = c!!.length //!!쓰게 되면,개발자가 봤을 때 이 코드는 널이 발생하지 않는 안전한 코드다.라고 컴파일러에게 알려줌
//Null을 없애주는 것은 아니고 널이 발생하든 안하든 개발자가 체크해야하는 부분이다.
}
출처 : FastCampus
'Kotlin' 카테고리의 다른 글
Kotlin.06 클래스와 프로퍼티 (0) | 2023.04.02 |
---|---|
Kotlin 05.예외처리 (0) | 2023.04.02 |
Kotlin 03. 흐름제어 (0) | 2023.04.02 |
Kotlin 02. 함수 (0) | 2023.04.02 |
Kotlin 01.변수 (0) | 2023.04.02 |