본문 바로가기

프로젝트

사용하면서 느낀 Kotlin의 Null Safety

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 값을 제공한다. 기존 자바에 없던 캐스팅 실패에 대해 안정성을 보장한다고 생각한다.

val length: Int = nullableVariable as? Int

결론

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