코틀린은 자바보다 null에 대한 좀 더 세밀한 안정적인 처리가 가능한데, 이것을 Null Safety라고 한다.
코틀린의 Null Safety를 통해 NullPointerException이 생기는 것을 방지할 수 있다.
Nullable : 물음표(?)
nullable은 단어 그대로 변수에 null을 허용하겠다는 의미이다.
[변수 선언]
코틀린에서는 기본적으로 변수를 선언할 때 다른 언어와 달리 초기값을 null로 하는 것이 불가능하다.
그러므로 변수에 null을 저장하고 싶다면 즉, null을 허용하고 싶다면
var variable : String?
이렇게 변수의 타입 뒤에 물음표를 추가해야 한다.
[매개변수 선언]
메서드의 매개변수를 Nullable로 만들 경우에는 다음과 같다.
fun nullableExample(variable : String?){}
이 때 주의해야 할 것은 매개변수가 Nullable인 경우에는 항상 null인지 아닌지를 체크해줘야 한다.
아래 코드를 보면 variable 변수가 null이 허용된다. 그러므로 메서드 내에서 조건문을 통해
variable이 null인지 아닌지를 검사해줬다.
[반환]
메서드의 반환값에 null을 허용할 때도 마찬가지로 리턴 타입 뒤에 물음표를 붙여준다.
fun nullableExample(variable : String?) : String?
Safe Call : 물음표 + 온점(?.)
만약 어떤 변수에 null값이 들어있는데 해당 변수의 프로퍼티나 메서드를 호출하면 NullPointerException이 발생하게 된다. 그러므로 오류를 막기 위해 위의 예시에서는 변수가 Nullable이면 조건문을 이용하여 null이 아닌지를 체크해줬다.
하지만 Safe Call을 이용하면 null 여부를 확인하는 조건문을 사용할 필요가 없다.
변수가 null이면 프로퍼티나 메서드를 호출하지 않기 때문이다.프로퍼티나 메서드를 호출하는 대신에 null값을 반환한다.
기본 변수의 경우 변수명.프로퍼티 혹은 변수명.메서드로 프로퍼티나 메서드를 호출한다면,
Safe Call로 만들기 위해서는 멤버 연산자(온점) 앞에 물음표를 추가한다.
var length = variable?.length
조건문 사용하기
Safe Call 사용하기
Elvis Operator : 물음표 + 콜론(?:)
Safe Call을 사용하면 변수가 null인 경우에는 프로퍼티나 메서드를 호출하는 대신 null를 반환한다고 했다.
Elvis Operator을 사용하면 null을 반환하는 대신 다른 기본값을 반환하도록 설정할 수 있다.
var length = variable?.length?:기본값
아래 코드에서 만약 variable이 null이라면 length 변수에 들어가는 값은 null이 된다.
만약에 variable가 null일 때, length에 -1을 넣고 싶다면 다음과 같이 변경하면 된다.