NullPointerException 을 해결하는 방법

도현욱·2023년 3월 11일
1


앱의 업데이트 이후 갑자기 앱의 배너가 보이지 않는 현상이 발생했다.
에러의 원인을 파악해보니 NullPointerException 였고, 구글에 검색을 해보니

"NullPointerException은 실제 값이 아닌 null을 가지고 있는 객체/변수를 호출할 때 발생하는 예외다."

라고 나와서 나는 코드를 뜯어보기 시작했다...


우선 NullPointerException이 발생한 BannerRepositoryImpl 부분입니다.(참고로 NullPointerException은 런타임 도중 발생하는 에러기 때문에 빨간줄이 안뜬다 ㅡㅡ) 여기서 저는 getActiveBanner 함수에 널이 들어왔다고 생각하고 여기저기 널을 허용해봤습다. 대략 이틀간을 애꿎은 DataSource, Usecase, remote, interface 등등을 건들며 뻘짓을 했습니다.

아무리 생각해봤으나 도저히 저 함수에는 널값을 리턴할 수가 없는 구조였다고 생각했습니다.(왜냐면 반환형이 "List< Banner >" 이기에 값이 비어도 EmptyList가 return 되어야 한다.) 그제서야 저는 다른 것들을 살펴봤습니다.


먼저 okhttp logcat을 뜯어보니 다음과 같이 서버에서는 정상적으로 값이 전달된 것을 볼 수 있었습니다. 그러면 혹시 내가 잘못 받아온 것은 아닌지 뜯어보기 시작했습니다.


여기에도 깨긋하자 저는 마지막으로 data class들을 뜯어보기 시작했습니다.

okhttp banner logcat
.
{"status":200,
"message":"유효 배너 조회 성공",
"data":[{"id":66,
"image":"--",
"title":"팀바인드베너",
"status":"ACTIVE",
"bannerOrder":1,
"expiryDateTime":"2023-12-06 18:00:00",
"createdDate":"2022-12-06 18:00:00"}]}

바로 createdDate 부분이 달랐습니다. json에서는 createdDate 이지만 dataclass 에서는 createDate 라고 SerializedName을 받아 온 것이다!

NullPointerException이 뜰 때 앞으로 데이터 클래스도 한번 쯤 확인 했으면 좋겠습니다.
저처럼 이틀씩 버리기 싫으시면 말이죠
사실 Json to Kotlin Class 플러그인을 잘 쓴다면 만날일도 없는 문제입니다만 도저히 널이 올 수 없다고 생각된다면 데이터 클래스를 한 번 확인해보시길 바랍니다.

profile
android 개발자를 꿈꾸며

1개의 댓글

comment-user-thumbnail
2023년 4월 6일

앞으로는 데이터 클래스를 잘 확인해야겠군요!

답글 달기