회사에서 Json을 Gson으로 변경하는 작업을 시작한다고 합니다. 그래서 아무 생각 없이 JSONObject를 JsonObject로 바꾸는데 기본적으로 Json과 Gson에 대한 이해도가 부족하다는 것을 깨닫게 되었습니다. 솔직히 두 개의 차이점을 모르고 그냥 변경하고 있었을 때는 몰랐습니다. 이 두 개의 차이가 현저하다는 사실을요! 그러나 문제는 아래 부분의 코드에서 발생했습니다.
nurl += "$t=${URLEncoder.encode(u.toString(), "utf-8")}&"
이 코드에서 u는 현재 JsonElement입니다. 하지만 원래 JSONObject를 사용할 때에는 아무런 문제도 없었죠. 하지만 이것을 Gson을 쓰기 위해 변경한 후에 자세히 보니 타입이 JsonElement로 변경되어 있었습니다.
JSONObject에서 value 값을 toString하면 어떤 값이든 일반 변수를 toString 한 것처럼 변화시켜 줍니다. 쉬운 예로 보자겠습니다.
val JO = JSONObject("{"Int":15, "String":"조금 우울함"}")
println(JO.getInt("Int").toString())
println(JO.getString("String").toString())
이런식으로 코드를 넣는다면 결과값으로는
15
조금 우울함
위와 같은 상태로 로그창에 뜰 겁니다.
이 상태에서 만약 Gson을 이용해 데이터를 넣고 출력한다면 어떤 방식으로 뜨게 되는지 알아보겠습니다.
val JO = JsonObject.apply {
add("Int", 15)
add("String", "조금 우울함")
}
println(JO.get("Int").toString())
println(JO.get("String").getAsString())
println(JO.get("String").toString())
15
조금 우울함
"조금 우울함"
제가 어떤 이야기를 하고 싶은지 감이 오실 것 같습니다. 회사에서는 JSONObject 코드를 JsonObject 코드로 변경하면서 toString을 그대로 둔 채로 변경을 하게 되어 ""를 제거하지 못하게 되었습니다. 되게 별 거 아닌 문제이고 이 문제는 쉽게 수정할 수 있는 문제이지만, 저처럼 JSONObject와 JsonObject가 비슷한 게 아니냐는 생각으로 접근했다가는 생각보다 어렵게 오류를 발견하고 수정해야 하는 문제가 생길 수 있습니다.
제가 저 경우를 발견했을 때에는 회사 서버에게 데이터를 요청하기 위해 GET 메소드 URL을 만들기 위해 사용했었습니다. 문제는 이미 완성된 프로젝트에서 코드를 매우 많은 부분에 걸쳐 수정이 이루어졌기 때문에 어떤 부분에서 에러가 났길래 데이터가 서버로부터 받아와지지 않는지 의문이었습니다. 처음에는 서버가 고장났는지 찾다가, 응답은 가는 것을 확인하고 데이터를 보내는 파라미터에 오류가 있는지 찾다가, 마지막에는 데이터가 왜 오지 않는지를 찾기 시작했습니다. 결국 URL 문제라는 것을 확인하고 저기서 ""가 왜 들어갔는지 한참을 고민했더랬죠. 이게 바로 라이브러리 이해의 부족이라는 것입니다.
저 문제를 찾고 난 후에 새삼스럽게 새로운 라이브러리를 적용하게 될 때에는 항상 어느정도 시간을 두고 적용을 해야된다는 사실을 인지했습니다. 이미 안드로이드 코드의 새로운 버전을 위해 코드를 대대적으로 뜯어고치고 있는 와중에 저 코드를 적용해야 한다고 해서 급하게 Gson과 Json의 차이점을 찾아보지 않고 바로 수정했던 것이 화근이 된 것 같습니다.
어느정도 Json을 Gson으로 변경하고 테스트 한 후, Gson vs Json에 대한 공부를 해서 포스팅을 해야겠다는 목표가 생긴 이슈입니다.
'안드로이드 > 코틀린' 카테고리의 다른 글
(android-jetpack)AAC에서의 뷰모델 (0) | 2021.03.30 |
---|---|
(android - jetpack)데이터 바인딩 작업 (0) | 2021.03.22 |
(android) 스플래시 화면 만들기 (0) | 2021.03.11 |
Kotlin으로 만든 커스텀 버튼 (0) | 2021.02.09 |
디버깅과 릴리즈, 그리고 proguard (0) | 2020.09.03 |
댓글