Kotlin은 null-safe하다. 하지만 같이 쓰는 자바 라이브러리들은 kotlin의 null-safety를 모른다.

data class Response(
        val status: String,
        val message: String?,
        val contents: Contents
)

retrofit의 interface에 구현된 api call 중 하나의 응답으로 위와 같은 객체를 사용했다. 그리고 내가 이해한 프로토콜 상으로는 contents field가 없는 응답은 없었다. 그러면 위 클래스는 잘 정의 됐다.

그런데 두 가지 문제가 있었다. 첫번째, 실제 api는 contents에 null이 들어가는 경우가 있다. 두번째, contents에는 null이 들어갈 수 있다. 나는 프로토콜에 결함이 있었어도, contents를 읽다가 에러가 발생해야 한다고 봤다. Contents?가 아닌 Contents니깐.

그런데 저 json 응답을 deserialize해서 data class로 객체화 하는 jackson 라이브러리는 자바로 구현되어 있었다. 자바는 저 클래스 정의를 코틀린 코드로 읽어봤자 null-safe type이 뭔지 모른다. 그냥 null을 때려 넣어서 객체를 만들어줬다.

결국 서비스 로직 단에서 npe가 터졌다. Kotlin은 null-safe 하지만 같이 쓰는 자바 라이브러리들은 kotlin의 null-safety를 모른다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중

search previous next tag category expand menu location phone mail time cart zoom edit close