자바 개발자를 위한 코틀린 입문 에 강의 내용을 정리한 내용이다.
코틀린에서 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") }
|
startWithA1
에서 parameter값에 null이 올수 있기 때문에 type에 ?
붙여 null이 들어올 수 있음을 명시
startWithA2
에서 return type에 null이 올수 있기 떄문에 return type에 ?
붙여 null이 들어올 수 있음을 명시
- 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 체크를 코틀린 스럽게 변경
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") }
|
소스코드
참조