안드로이드 JSON 파싱 라이브러리 비교 - Gson vs Moshi
✨ 개요
안드로이드 앱에서 서버와 통신할 때 가장 자주 사용하는 포맷은 단연 JSON입니다. 이를 객체로 파싱하거나 객체를 JSON으로 직렬화(Serialize)할 때 필요한 것이 바로 JSON 파싱 라이브러리인데요. 그중 대표적으로 많이 사용되는 것이 Gson과 Moshi입니다.
1. Gson과 Moshi 란?
라이브러리 | 설명 |
---|---|
Gson | Google에서 만든 JSON 파서, 오래되고 널리 사용됨 |
Moshi | Square에서 만든 경량 JSON 파서, 최신 안드로이드 앱에서 많이 채택됨 |
2. 의존성 추가
// Gson
implementation("com.google.code.gson:gson:2.10.1")
// Moshi
implementation("com.squareup.moshi:moshi:1.15.0")
implementation("com.squareup.moshi:moshi-kotlin:1.15.0")
kapt("com.squareup.moshi:moshi-kotlin-codegen:1.15.0") // 어노테이션 기반 매핑 시 필요
3. 사용 예제
데이타 클래스
data class User(
val id: Int,
val name: String,
val email: String
)
Gson
val json = """{"id":1, "name":"Joo", "email":"joo@example.com"}"""
val gson = Gson()
val user = gson.fromJson(json, User::class.java)
println(user.name) // Joo
val jsonOutput = gson.toJson(user)
Moshi
val json = """{"id":1, "name":"Joo", "email":"joo@example.com"}"""
val moshi = Moshi.Builder().build()
val adapter = moshi.adapter(User::class.java)
val user = adapter.fromJson(json)
println(user?.email) // joo@example.com
val jsonOutput = adapter.toJson(user)
4. Gson vs Moshi 비교
항목 | Gson | Moshi |
---|---|---|
제작사 | Square | |
속도/성능 | 느린 편 (리플렉션 기반) | 빠름 (옵션에 따라 코드 생성 가능) |
Kotlin 지원 | 약함 (Kotlin 데이터클래스 이슈 있음) | 강력함 (moshi-kotlin 지원) |
커스터마이징 | 쉽지만 코드가 복잡해질 수 있음 | 어노테이션 기반으로 깔끔함 |
오류 처리 | 유연하나 런타임 오류 많음 | 엄격하고 안정적 |
유지보수 | 거의 업데이트 없음 | 활발히 유지보수 |
5. Moshi 사용 시 주의할 점
- Kotlin에서 기본값이 있는 프로퍼티는 Moshi가 무시하므로, @JsonClass(generateAdapter = true)를 붙이고 kapt를 사용한 코드 생성 방식을 권장합니다.
-
@JsonClass(generateAdapter = true) data class User( val id: Int, val name: String, val email: String = "" )
- kapt가 없으면 기본값이 적용되지 않거나, 예상과 다른 결과가 발생할 수 있습니다.
6. 성능 비교 (요약)
- Moshi는 리플렉션 없이 코드 생성 방식으로 설정하면 Gson보다 더 빠르고 가볍습니다.
- 특히 Retrofit과 함께 사용할 경우 Moshi가 공식 추천됩니다.
7. 결론
Gson과 Moshi는 각각 장단점이 있지만, 2020년 이후 안드로이드 개발 트렌드에서는 Moshi가 점점 더 널리 채택되고 있습니다. 특히 Kotlin과의 궁합, Retrofit 연동, 성능 측면에서 Moshi는 매우 우수한 선택입니다.