Gson이란?
| Json → Java 객체, Java 객체 → Json 의 변환을 도와주는 라이브러리입니다.
그러면 Gson과 Retrofit2를 같이 사용하는 이유를 알아보겠습니다.
기본적으로 Retrofit2를 이용하여 서버통신을 진행할 경우, Json의 변수 명에 맞춰 Response Data Class를 생성해주어야 합니다.
EX)
response : 200,
message: "서버 통신에 성공하였습니다!",
data : [
{
id: 1,
name: "홍길동"
phone_number: "010-1234-5678"
updateAt: "2022.10.28"
},
{
id: 2,
name: "김철수"
phone_number: "010-5678-1234"
updateAt: "2022.10.28"
}
]
| 예시를 위해서 Json Response 를 극단적으로 설정해두었습니다...😅
data class User (
val id: Int,
val name: String,
val phone_number: String // Snake case
val updateAt: String // Camel Case
)
data class BaseResponse<T> (
val response: Int,
val message: String,
val data: List<T>
)
하지만 위의 코드를 작성하는 과정에서 팀의 코딩 컨벤션과 일치하지 않는 경우가 생길 수 있습니다.
해당 팀에서 Snake Case를 사용한다면 updateAt 변수가 컨벤션에서 어긋나게 되고, Camel Case를 사용한다면 phone_number 변수가 컨벤션에서 어긋나는 것을 확인할 수 있습니다.
위의 경우에서 Gson 라이브러리를 Retrofit2와 함께 사용합니다.
EX)
response : 200,
message: "서버 통신에 성공하였습니다!",
data : [
{
id: 1,
name: "홍길동"
phone_number: "010-1234-5678"
updateAt: "2022.10.28"
},
{
id: 2,
name: "김철수"
phone_number: "010-5678-1234"
updateAt: "2022.10.28"
}
]
data class User (
@SeriallizedName("id")
val id: Int,
@SeriallizedName("name")
val name: String,
@SeriallizedName("phone_nuber") // Snake Case -> Camel Case
val phoneNubmer: String
@SeriallizedName("updateAt") // Camel Case -> Snake Case
val update_at: String
)
data class BaseResponse<T> (
val response: Int,
val message: String,
val data: List<T>
)
object RetrofitClient {
val userService: UserService = initService()
private fun initService(): UserService =
Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
// Gson 라이브러리를 이용할 경우 GsonConverFactory 코드를 붙여주셔야 합니다.
.build()
.create(UserService::class.java)
}
}
위의 방식을 이용하여 해당 팀의 컨벤션에 맞게 Data Class 를 사용할 수 있습니다.