Java to Kotlin (2) - null을 다루는 방법

이동명·2024년 6월 2일
0

kotlin

목록 보기
2/19
post-thumbnail

개요

코틀린에서 null을 다루는 방법에 대해 공부하면서 포스팅을 해보겠습니다.


null 체크

아래의 자바코드는 어떠한 문자열이 A로 시작하는지 아닌지에 대해 판단하는 로직 입니다. 이 코드는 안전할까요 ?

답은 아닙니다. 이유는 간단 합니다. java 에서 String 변수에는 null이 들어올 수 있습니다. 따라서 NPE 가 발생합니다.

java 에서 예외처리를 간단하게 해준다면 아래처럼 몇가지 방법을 사용 할 수 있습니다. 이를 Kotlin 으로 변환하면서 살펴보겠습니다.

    1. Exception 발생

    java에서 null이 들어올 수 없는 타입을 지정해줬기 때문에 Kotlin 에서도 '?' 키워드를 사용 하지 않습니다.

    1. null일 경우 null을 반환

    java에서 null이 들어올 수 있는 타입을 지정해줬기 때문에 Kotlin에서도 '?'키워드를 사용합니다.

    1. null일 경우 false를 반환

    1번과 같습니다.

![](https://velog.velcdn.com/images/dm911/post/06c977fd-8fb2-40e5-8980-51e77b2d7d75/image.png)

또한 Kotlin에서 null 일 수 있는 변수에서는 바로 메소드콜을 할 수 없습니다.

아래를 보면 '?' 키워드를 사용하지 않았기 때문에 null 예외처리가 되었고 바로 메소드콜을 할 수 있습니다. '?'키워드가 붙는다면 null 예외처리를 해줘야 메소드를 사용할 수 있습니다.

![](https://velog.velcdn.com/images/dm911/post/b4173b90-3cff-4493-8bee-f7f1b0190480/image.png)

SafeCall과 Elvis연산자

Kotlin 에서는 null이 가능한 타입만을 위한 기능도 제공합니다.

Safe Call

아래의 코드를 보면 null이 가능한 변수에는 메소드를 바로 사용할 수 없습니다.

'?' 키워드를 이용해 null 이 아닐경우에만 호출해줘 라는 코드로 변환 할 수 있습니다. null 일 경우 전체가 null이 됩니다.


Elvis 연산자

앞의 연산 결과가 null이면 뒤의 값을 사용 한다는 의미 입니다.


따라서 위의 예외처리 했던 코드들을 조금 더 Kotlin 스럽게 수정해보면 ?

    1. Exception 발생

    1. null일 경우 null을 반환

    1. null일 경우 false를 반환

위의 코드처럼 수정할 수 있겠다.

early return에도 사용할 수 있다


널 아님 단언

아무리 생각해도 null이 들어올 수 없는 변수일 경우 아래처럼 사용이 가능하다.

하지만 null이 들어오면 NPE가 나오기 때문에

정말 null이 아닌게 확실한 경우에만 사용해야 한다.


플랫폼 타입

Kotlin에서 Java 코드를 가져다 사용할 때 어떻게 처리될까 ?

아래와 같은 클래스를 Kotlin에서 가져다 사용한다면 무슨 문제가 있을까 ?

@Nullable 때문에 에러가 나고 있는 모습이다.

Kotlin 입장에서는 null 인지 아닌지 알 수 있는 정보가 없을 때 일단 실행을 시켜준다.

하지만 null이 들어온다면 NPE가 발생하게 된다.

따라서 Kotlin에서 Java코드를 사용할 때 null관련 정보를 꼼꼼히 작성하거나 라이브러리 사용 시 해당 라이브러리에 null이 올 수 있는지 확인을 해야한다.


다음 포스팅에선 Type을 다루는 방법에 대해서 공부하며 포스팅 해보겠습니다.

profile
Web Developer

0개의 댓글