티스토리 뷰
728x90
1. Nullable 자바와의 비교
void setInfo(@NonNull String a, @Nullable String b) {
}
public void test() {
setInfo(null, null);
}
자바는 @NonNull (또는 @NotNull) 을 사용할 수 있다.
그러나 런타임시 Exception 에러를 발생하고, 컴파일단에서는 Warning만 줄 뿐이다.
Kotlin에서는
- 기본적으로 null을 허용하지 않는다.
- null을 명시적으로 나타내기 위해서는 ? 를 추가해야 한다.
- java 디컴파일시 Exception이 발생하도록 내부 처리를 하고 있다.
- IDE에서 null을 사용할 수 없음을 즉시 알려준다.
fun setInfo(a: String, b: String?) {
}
fun test() {
setInfo(null, null) // 컴파일 에러!
}
2. Elvis Operator
자바에서 3항식은 아래와 같다.
String temp = null;
int size = temp != null ? temp.length() : 0;
- Elvis Operator 는 3항식의 역할을 하는데 , ?: 를 사용한다.
val temp: String? = null
textView.text = temp ?: ""
Kotlin의 NullPointException
<Null Pointer Exception in Java>
String temp = null;
int size = temp.length(); // Null Pointer Exception!
<Null Pointer Exception in Kotlin>
val temp: String? = null
val size = temp!!.length // Null Pointer Exception!
3. 안전한 형 변환
- java
instanceof 를 사용
Object object = "name";
int index = 0;
if (object instanceof Integer) {
index = (int) object;
}
- kotlin
as 뒤에 ? 를 붙인다
val a: Any? = "ABC"
val b: Int? = a as Int // ClassCastException 발생
val b: Int? = a as? Int // 안전한 형변환
when을 사용한 안전한 처리
val a: Any? = "ABC"
when (a) {
is Int -> println(a)
is String -> println(a)
else -> println("nothing")
}
4. list에서 null 아이템을 제외하기
val listWithNulls: List<String?> = listOf("A", null, "B");
for (item in listWithNulls) {
// 출력
}
}
<스트림>
val listWithNulls: List<String?> = listOf("A", null, "B")
listWithNulls.filter { it != null }.forEach {
println("Text: $it")
}
<FilterNotNull 도 있다>
val itemList: List<String> = listWithNulls.filterNotNull();
5. Kotlin standard - run, let, apply 등을 이용한 null 처리
val sample: Sample? = Sample("Name", 20, "id")
tvName.text = Sample?.name ?: ""
tvAge.text = Sample?.text ?: ""
아래처럼 let을 사용하여 일괄 null 처리가 가능하다.
sample?.let {
tvName.text = it.name
tvAge.text = it.age
} ?: let {
println("Sample is null!!")
tvName.visibility = View.Gone
tvAge.visibility = View.Gone
}
1개 이상의 null 체크는 어떻게 할까요?
val a: String? = "ABC"
val b: String? = "BBB"
if (a != null && b != null) {
println("$a $b")
}
safeLet() 을 사용하면 된다
val a: String? = "ABC"
val b: String? = "BBB"
safeLet(a, b) { a, b ->
println("$a $b")
}
safeLet 함수 구조
'kotlin' 카테고리의 다른 글
Kotlin 자세히 알아보기 - apply, with, let, also, run (0) | 2019.08.15 |
---|---|
Kotlin 자세히 알아보기 - data class, singleton (0) | 2019.08.15 |
Kotlin 자세히 알아보기 - companion object, sealed classes (0) | 2019.08.11 |
Kotlin 자세히 알아보기 - constructor (0) | 2019.08.11 |
Kotlin 자세히 알아보기 - Inheritance, Abstract, Interface (0) | 2019.08.09 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- multi api
- Flutter
- SpinnerAdapter
- changenotifier
- MVP
- rxjava
- Kotlin
- flutter fcm push message background foreground killed
- Spinner
- provider
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
글 보관함