코틀린의 NULL
코틀린의 장점중 하나는 null로 인한 오류를 방지할 수 있다는 점이다. 그러면 null을 어떻게 사용하는지 알아보자.
코틀린에는 변수에 null을 허용하기 위해선 ?를 사용해야 한다. 다음은 null 허용과 비허용의 예시이다.
fun main() {
var nameNotNull = null // 이 문장은 null을 허용하지 않으므로 오류 발생
var nameNull? = null // ?가 있으므로 오류가 발생하지 않음
println("$nameNull") // 결과 : null
}
첫 번째 줄은 ? 기호가 없기 때문에 null을 할당하면 오류가 발생하지만 두 번쨰 줄은 null을 허용하므로 오류가 발생하지 않는다. 코틀린에서는 이런 방식으로 null이 들어갈 수 있는 변수와 들어가지 못하는 변수를 구분해 준다.
세이프 콜과 non-null 단정 기호, 엘비스 연산자
코틀린으로 프로그래밍을 하다 보면 앞에서 null을 허용한 변수에 접근해야 하는 일이 생긴다. 이때 null에 접근을 하면 당연하겠지만 에러가 생긴다. 하지만 프로그래머는 이 사실을 쉽게 알기 힘들다. 이런 일을 방지하기 위해 코틀린에서는 세이프콜과 non-null 단정 기호를 지원한다.
세이프 콜
세이프 콜은 "?."로 표현한다. 세이프 콜을 사용해 null 변수에 접근하면 변수가 null인지 아닌지 검사한 후 접근한다.
다음은 세이프 콜의 사용 예시이다.
var str1: String? = "Hello World!"
str1 = null
//"?." 세이프 콜 연산
println("str1: ${str1?.length}")
non-null 단정 기호
non-null 단정 기호는 "!!"로 표현한다. non-null 단정 기호는 !!이 붙은 변수를 non-null 타입으로 바꿔준다.만약 이 변수가 null을 가지고 있다면 NPE(Null Pointer Error)를 발생하고 그렇지 않다면 정상적인 값을 준다. 다음은 !!의 사용 예시이다.
//"!!" non-null 단정 기호
println("str1: ${str1!!.length}")
!!의 에러 발생 타이밍은 컴파일을 할 때이다. 즉 우리가 IDE에서 작성을 하고 있는 동안에는 문제가 없지만 컴파일을 하게 되면 !!에 의해 NPE가 발생하고 컴파일을 중단된다.
엘비스 연산자
엘비스 연산자는 ?:로 표현된다. 접근하는 변수가 null인지 아닌지 판단하여 null이면 엘비스 연산자 기준 오른쪽을 수행하고 반대면 왼쪽을 수행한다. 다음은 엘비스 연산자 예시이다.
var str1: String? = "Hello World!"
println("str1: ${str1?.length ?: "it's null"}") // 오른쪽 수행
'kotlin' 카테고리의 다른 글
[코틀린] is, as 키워드 (0) | 2022.07.27 |
---|---|
[코틀린] 자료형과 변수 (0) | 2022.07.27 |
[코틀린] 패키지란 무엇인가? (0) | 2022.07.27 |
코틀린이란? (0) | 2022.01.31 |
코틀린으로 Hello world를 찍어보자 (0) | 2022.01.31 |