코틀린에서 null을 다루는 방법에 대해 공부하면서 포스팅을 해보겠습니다.
아래의 자바코드는 어떠한 문자열이 A로 시작하는지 아닌지에 대해 판단하는 로직 입니다. 이 코드는 안전할까요 ?
답은 아닙니다. 이유는 간단 합니다. java 에서 String 변수에는 null이 들어올 수 있습니다. 따라서 NPE 가 발생합니다.
java 에서 예외처리를 간단하게 해준다면 아래처럼 몇가지 방법을 사용 할 수 있습니다. 이를 Kotlin 으로 변환하면서 살펴보겠습니다.
java에서 null이 들어올 수 없는 타입을 지정해줬기 때문에 Kotlin 에서도 '?' 키워드를 사용 하지 않습니다.
java에서 null이 들어올 수 있는 타입을 지정해줬기 때문에 Kotlin에서도 '?'키워드를 사용합니다.
1번과 같습니다.

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

Kotlin 에서는 null이 가능한 타입만을 위한 기능도 제공합니다.
아래의 코드를 보면 null이 가능한 변수에는 메소드를 바로 사용할 수 없습니다.
'?' 키워드를 이용해 null 이 아닐경우에만 호출해줘 라는 코드로 변환 할 수 있습니다. null 일 경우 전체가 null이 됩니다.
앞의 연산 결과가 null이면 뒤의 값을 사용 한다는 의미 입니다.
따라서 위의 예외처리 했던 코드들을 조금 더 Kotlin 스럽게 수정해보면 ?
위의 코드처럼 수정할 수 있겠다.
아무리 생각해도 null이 들어올 수 없는 변수일 경우 아래처럼 사용이 가능하다.
하지만 null이 들어오면 NPE가 나오기 때문에
정말 null이 아닌게 확실한 경우에만 사용해야 한다.
Kotlin에서 Java 코드를 가져다 사용할 때 어떻게 처리될까 ?
아래와 같은 클래스를 Kotlin에서 가져다 사용한다면 무슨 문제가 있을까 ?
@Nullable 때문에 에러가 나고 있는 모습이다.
Kotlin 입장에서는 null 인지 아닌지 알 수 있는 정보가 없을 때 일단 실행을 시켜준다.
하지만 null이 들어온다면 NPE가 발생하게 된다.
다음 포스팅에선 Type을 다루는 방법에 대해서 공부하며 포스팅 해보겠습니다.