-
Gson, Retrofit2 - Enum Class 쓰는 법 (Kotlin, Android)Android📱/삽질 기록... 2023. 3. 10. 10:37
Retrofit은 Enum이 된다
Api 통신을 하다 보면 서버에서 Type으로 Enum을 내려 주는 경우가 많다
문서에 String이라고 쓰여있길래 지금까지 그냥 String으로 받아서 kotlin enum class에 name으로 비교해서 분기를 했었다.
data class User( @SerializedName("name") val name: String, @SerializedName("age") val age: Int, @SerializedName("type") val type: String ) enum class UserType { TEACHER, STUDENT } fun getUserTitle() { val user = getUser() if(user.type == UserType.TEACHER.name) { return "선생님" } return "학생" }
뭔가 한번에 enum을 받을 수는 없을까?라는 고민은 했지만....
시도해 보기에는 시간적 여유가 없다는 핑계를 대며 미뤄왔다....
회사에서 할 수도 없고, 집에서는 서버도 없는데 헤헤
했지만 그냥 Json 문자열 만들어서 테스트해 보면 되는 걸 깨달아버림 ㅠ
그래서 바로 ㄱㄱ
{ "name": "김철수", "age": 40, "type": "TEACHER" }
위 데이터를 파싱한다면
data class User( @SerializedName("name") val name: String, @SerializedName("age") val age: Int, @SerializedName("type") val type: UserType? ) enum class UserType { TEACHER, STUDENT }
data class를 이런 식으로 수정해 주면 (nullable이 좋다 내 코드에 없는 enum이 내려올 경우를 대비...)
Gson이 알아서 name을 비교해 맞는 enum으로 변경해 준다!!
enum class에 value를 넣어주면 string이나 int도 enum으로 받을 수 있음 ㄷㄷ
enum class UserType(val value: Int) { TEACHER(0), STUDENT(1) } enum class UserType(val value: String) { TEACHER("teacher"), STUDENT("stundent") }
위 코드 같은 방식으로도 적용이 가능하니 Android 개발 시 Retrofit이나 Gson을 사용해야 할 때 보기 좋게 enum을 사용해 주면
조금 더 다른 사람과 함께 하기 좋은 코드가 되지 않을까 싶다!
'Android📱 > 삽질 기록...' 카테고리의 다른 글
[Android] Oss-licenses 오픈소스 라이선스 표시하기 (2) 2023.05.19 Error inflating class androidx.fragment.app.FragmentContainerView (0) 2023.03.24 Retrofit DELETE Body 추가하기 (0) 2023.03.02 Jetpack Compose Navigation으로 URL 보낼때 오류Navigation destination that matches request NavDeepLinkRequest (0) 2022.10.11 dateFormat으로 날짜를 파싱할때 에러! (0) 2022.10.03