Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- scroll
- Compose
- 앱
- Flutter
- intent
- activity
- ScrollView
- android
- CustomScrollView
- DART
- Navigation
- textview
- textfield
- 안드로이드
- livedata
- appbar
- LifeCycle
- 테스트
- TEST
- 계측
- Coroutines
- viewmodel
- tabbar
- binding
- data
- 앱바
- Button
- Kotlin
- Dialog
- drift
Archives
- Today
- Total
Study Record
[Kotlin] null safety 본문
728x90
😶 Null safety
Kotlin 에는 많은 프로그래밍 언어에서 발생하는 NullPointerException 줄여서 NPE 가 발생하는 것을 방지하기 위한 기술이 포함되어 있다.
Kotlin 에는 null 을 포함하냐 포함하지 않냐에 따라 변수의 데이터 타입을 정할 수 있다. null 을 포함하는 변수를 만들면 말 그대로 null 을 포함할 수 있고 null 을 포함하지 않은 변수를 만들면 절대로 null 이 될 수 없다.
선언하는 방식은 "?" 기호를 데이터 타입에 붙이면 null 을 포함하게 되고 "?" 기호를 붙이지 않으면 null 을 포함하지 않은 변수를 뜻한다.
var a : String? = null
var b : Int = 5
😶 null 일 경우 실행하지 않음(?.)
클래스의 멤버 변수를 불러오거나 멤버 함수를 실행할 때 인스터스 정보를 담고 있는 변수가 null 을 포함하고 있다면 그대로 실행한다면 NPF 오류가 생길 수 있다. 이럴 때 "?." 를 사용하면 지금 변수가 null 이 아닐 경우에만 실행한다.
val s: Int? = 5
s?.toString()
s?.absoluteValue
😶 null 인지 아닌지 체크하기
null 이 포함된 변수는 값이 null 일수도 있는 가능성이 항상 존재한다. 따라서 항상 변수가 값이 null 인지 아닌지 확인해야 한다.
var b : String? = "fdsf"
val l: Int = if(b != null) b.length else -1
// Elvis Operator
val El: Int = b?.length ?: -1
😶 강제로 시행하기(!!)
!! operator 를 붙이면 실행하려는 변수가 null 인지 아닌지 관계없이 무조건 실행한다. 따라서 NPF 오류가 발생할 가능성이 있다. 확실히 null 이 아닐경우에만 사용해야 한다.
val b: String? = "fdsdfq"
val l = b!!.length
😶 let (scope functions)
inline fun <T, R> T.let(block: (T) -> R): R
let 이라는 inline 함수를 사용하면 해당 변수가 null 이 아닌 경우에만 let 블록 안의 내용을 실행한다.
val b: String? = "erwer"
b?.let { it ->
// it = erwer
println(it)
}
Null safety | Kotlin
kotlinlang.org
728x90
'안드로이드 > Kotlin' 카테고리의 다른 글
[Kotlin] 람다식 및 고차함수 (0) | 2023.07.19 |
---|---|
[Kotlin] vararg 키워드 (0) | 2023.07.17 |
[Kotlin] 클래스와 상속, 추상 클래스 (0) | 2023.07.09 |
[Kotlin] 조건부 (0) | 2023.07.03 |
[kotlin] 기본 용어 (변수, 함수, 주석, repeat()) (0) | 2023.06.30 |