자바 개발자를 위한 코틀린 입문 - 2. 코틀린에서 null을 다루는 방법


자바 개발자를 위한 코틀린 입문 에 강의 내용을 정리한 내용이다.
코틀린에서 null을 다루는 방법에 대해서 설명한다.

코틀린에서 null 체크

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
fun startWithA1(str: String?): Boolean {
if (str == null) {
throw IllegalArgumentException("null이 들어왔습니다.")
}
return str.startsWith("A")
}

fun startWithA2(str: String?): Boolean? {
if (str == null) {
return null;
}
return str.startsWith("A")
}

fun startWithA3(str: String?): Boolean {
if (str == null) {
return false;
}
return str.startsWith("A")
}
  1. startWithA1에서 parameter값에 null이 올수 있기 때문에 type에 ? 붙여 null이 들어올 수 있음을 명시
  2. startWithA2에서 return type에 null이 올수 있기 떄문에 return type에 ? 붙여 null이 들어올 수 있음을 명시
  3. 1번과 동일

Safe Call과 Elvis 연산자

Safe Call

Safe Call(?)은 null 아니면 실행하고, null이면 실행하지 않고 null값을 반환

1
2
3
val str: String? = "ABC"
str.length // 불가능
str?.length // 가능!

Elvis 연산자

Elvis 연산자(?:)는 앞의 연산 결과가 null이면 뒤의 값을 사용

1
2
var str2: String? = null
str2?.length ?: 0 // null 이면 무조건 0

코틀린에서 null 체크를 코틀린 스럽게 변경

1
2
3
4
5
6
7
8
9
10
11
fun startWithA1(str: String?): Boolean {
return str?.startsWith("A") ?: throw IllegalArgumentException("null이 들어왔습니다.")
}

fun startWithA2(str: String?): Boolean? {
return str?.startsWith("A")
}

fun startWithA3(str: String?): Boolean {
return str?.startsWith("A") ?: false
}

null 아님 단언

nullable type이지만, 아무리 생각해도 null이 될 수 없는 경우 !!를 사용
만약 null 값이 들어왔을 경우는 nullPointException이 발생

1
2
3
fun startWith(str: String?): Boolean {
return str!!.startsWith("A")
}

소스코드

참조