본문 바로가기

Android

[Android] 유용한 Plugin 소개 (JsonToKotlinClass)

소개

안드로이드 스튜디오의 플러그인 중 "JsonToKotlinClass"에 대해 소개하려고 한다.

Api 개발 시 요청 후 결과응답에 대한 data class(DTO)를 구현하는 것은 참 귀찮은 작업이다.

또한 안드로이드에서 코틀린 가이드에 따라 네이밍은 camelCase를 사용하는 반면,

서버의 응답 결과의 네이밍은 snake_case를 주로 사용하기에 DTO 구현 시 하나의 변수에도 매핑을 위해 별도의 선언을 해주어야한다.

 

이러한 귀찮은 작업들을 편하게 처리하도록 도와주는 플러그인이 바로 "JsonToKotlinClass"이다.


사용방법

예시로 Github Api를 사용하였고, 아래와 같은 Json 형태의 응답결과가 있다.

Json 형태의 응답결과

 

Android Studio에서 플러그인을 설치한다.

Mac기준 (Preferences -> Plugins) 에서 "JsonToKotlinClass"을 설치한다.

 

플러그인 실행은 만들고자 하는 패키지에서 마우스 오른쪽 클릭 후 New -> Kotlin data class File from JSON 을 선택한다.

 

구현하고자 하는 Json형태의 응답결과를 여기에 넣는다.

 

고급 옵션을 사용하면 조금 더 디테일하게 적용할 수 있다.

 

플러그인을 통해 data class(DTO) 생성 결과는 아래와 같다.

package com.lee.oneweekonebook.model


import com.google.gson.annotations.SerializedName

data class GitUserDTO(
    @SerializedName("avatar_url")
    val avatarUrl: String,
    @SerializedName("bio")
    val bio: Any,
    @SerializedName("blog")
    val blog: String,
    @SerializedName("company")
    val company: String,
    @SerializedName("created_at")
    val createdAt: String,
    @SerializedName("email")
    val email: Any,
    @SerializedName("events_url")
    val eventsUrl: String,
    @SerializedName("followers")
    val followers: Int,
    @SerializedName("followers_url")
    val followersUrl: String,
    @SerializedName("following")
    val following: Int,
    @SerializedName("following_url")
    val followingUrl: String,
    @SerializedName("gists_url")
    val gistsUrl: String,
    @SerializedName("gravatar_id")
    val gravatarId: String,
    @SerializedName("hireable")
    val hireable: Any,
    @SerializedName("html_url")
    val htmlUrl: String,
    @SerializedName("id")
    val id: Int,
    @SerializedName("location")
    val location: String,
    @SerializedName("login")
    val login: String,
    @SerializedName("name")
    val name: String,
    @SerializedName("node_id")
    val nodeId: String,
    @SerializedName("organizations_url")
    val organizationsUrl: String,
    @SerializedName("public_gists")
    val publicGists: Int,
    @SerializedName("public_repos")
    val publicRepos: Int,
    @SerializedName("received_events_url")
    val receivedEventsUrl: String,
    @SerializedName("repos_url")
    val reposUrl: String,
    @SerializedName("site_admin")
    val siteAdmin: Boolean,
    @SerializedName("starred_url")
    val starredUrl: String,
    @SerializedName("subscriptions_url")
    val subscriptionsUrl: String,
    @SerializedName("twitter_username")
    val twitterUsername: Any,
    @SerializedName("type")
    val type: String,
    @SerializedName("updated_at")
    val updatedAt: String,
    @SerializedName("url")
    val url: String
)

결론

안드로이드에서 Api 개발 시 매번 사용하는 플러그인이다.

이미 많은 개발자들이 알고 있을거라 생각한다.

혹시 아직 모르는 또는 이제 막 시작하는 개발자들에게 조금이라도 도움이 되었으면 좋겠다.