본문 바로가기

프로젝트

사용하면서 느낀 Kotlin의 Null Safety

val length: Int = nullableVariable?.length ?: 0

Null Safety

Kotlin에서는 Null Safety(널 안정성)을 제공을 한다. 개발을 하면서 흔하게 발생을 하는 예외 NPE(NullPointerException)에 대해 개발작 방지 할 수 있도록 하는 장치이다. 기존 Java에서도 이를 위해 Optional을 사용했으며, 이를 Kotlin에서는 처음부터 문법에 적용을 한 것이다.

 

❓Null 사용 여부

처음 따로 공부를 하지 않고 사용했을 때 Kotlin에서 Null 사용을 못하게 막은 것인 줄 알았다. 회사 Java 코드를 Kotlin으로 옮기면서 Null Safety에 대해 공부를 해보니, 변수 값에 Null을 허용을 할지 말지를 (Type + ?)를 통해서 정할 수 있다는 것을 알 수 있었다. 

 

❓이점

개발자의 실수를 많이 줄여줄 수 있다는 생각이 가장 많이 들었다. 요즘은 협업을 하다보면, 다른 사람이 작성한 클래스나 메서드 등을 사용을 하게 되고 이때 의도하지 않은 NPE가 발생할 수 있다. 하지만 (Type + ?)를 통해 Nullable을 정해놓는다면 동료 개발자가 작성한 변수 값에 대해 이해도가 올라가고 의도하지 않았던 NPE를 발생시키는 실수를 막을 수 있게 된다.

Null Safety를 위한 장치

✔ Safe Call Operator (?.)

?. 연산자는 변수에 대한 null체크를 간단하게 할 수 있도록 해 준 해당 변수가 null인 경우 연쇄 메서드나 변수 호출을 하지 않고 null을 반환한다. Java에서는 null을 체크하기 위한 If문을 사용했어야 했는데, 표현식이 훨씬 간결하게 사용할 수 있게 해준 것이다.

 

val length: Int? = nullableVariable?.length

 

Elvis Operator (?:)

?: 연산자는 변수 null 체크를 하고 null인 경우 기본 값을 제공한다.

 

val length: Int = nullableVariable?.length ?: 0

 

✔ Safe Cast (as?)

as? 연산자는 Type을 캐스팅할 때 실패를 할 경우 null 값을 제공한다. 기존 자바에 없던 캐스팅 실패에 대해 안정성을 보장한다고 생각한다.

 

 

결론

Koltin에서 제공하는 Null Safety를 위한 장치들은 전체적인 문법에 깔려있다. 계속해서 Java에서 Kotlin으로 Legacy Code를 이전하면서 Kotlin에서 사용하고 있지만, 잘 사용하는 것은 쉽지 않다는 것을 깨닫는다. 그래서 고민을 하고 Null Safety를 잘 사용할 수 있도록 계속해서 노력을 해야 할 것 같다. 추가적으로 Null Safety를 위한 문법들도 하나하나 더 배워가야겠다.