Data Class에서 내가 자주 사용하는 활용
1. Response를 받은 데이터들을 내가 사용할 Data로 가공하기
// Response 받을 데이터 클래스
data class DataResponse(
val a: String,
val b: String,
val c: String,
val d: Int,
)
// DataResponse클래스를 MyData class로 변경하기 위한 함수
fun DataResponse.toMyData(): MyData {
val dataList = listOf<String>(a, b)
return MyData(
dataList = dataList,
)
}
// 내가 UI에서 사용할 데이터
data class MyData(
val a: String,
val b: String,
)
나는 Response에서 필요하지 않는 필드 값을 사용하지 않기 위해서 MyData처럼 DataClass를 만든 뒤 fun DataResponse.toMyData()같은 형식으로 MyData를 생성할 수 있도록 만들어 준다.
// repository.getData()는 DataResponse를 받는 함수
val myData = repository.getData().toMyData()
그 후 이런 식으로 나는 myData를 받은 뒤 UI에 적용한다.
2. 분류 후 텍스트뷰에 적용
이건 최근에 내가 코드를 리팩토링 중 사용했던 방법이다.
fun Data.getClassification(): Classification {
val temperatureClassification = classifyTemperature()
val humidityClassification = classifyHumidity()
val illuminanceClassification = classifyIlluminance()
return Classification(temperatureClassification, humidityClassification, illuminanceClassification)
}
private fun Data.classifyTemperature(): String {
// 여기서는 return을 좋음, 보통, 나쁨을 리턴하면 됨
}
private fun Data.classifyHumidity(): String {
// 여기서는 return을 좋음, 보통, 나쁨을 리턴하면 됨
}
private fun Data.classifyIlluminance(): String {
// 여기서는 return을 좋음, 보통, 나쁨을 리턴하면 됨
}
원래 존재했던 데이터 클래스에서 분류하기 위해서 Classification이라는 데이터 클래스를 만든다.
그리고, Data에 들어있는 온도,습도,조도값을 분류하기 위해서 Data.classifyOOO와 같은 함수를 또 만든 뒤 return 값을 "좋음" "보통" "나쁨" 중 하나로 리턴한다. (내가 개발할 땐 기준에 따라 리턴을 했었다.)
fun setTextViewProperties(textView: TextView, classification: String) {
when (classification) {
"좋음"-> {
// 좋음 경우 textView의 설정
}
"보통" -> {
// 보통경우 textView의 설정
}
"나쁨"-> {
// 나쁨 경우 textView의 설정
}
else -> {
// 그 외 경우 textView의 설정
}
}
}
fun setupUi() {
val data: Data = ...
val classification = data.getClassification()
setTextViewProperties(textView1, classification.temperatureClassification)
setTextViewProperties(textView2, classification.humidityClassification)
setTextViewProperties(textView3, classification.illuminanceClassification)
}
그 후 위 와 같이 분류를 통해서 텍스트를 적용했었다.
데이터 클래스의 활용을 이런 식으로 많이 사용했었던 거 같다.
이런 식으로 사용하면 메인에 UI를 설정할 때 복잡한 코드를 많이 줄일 수 있어서 좋은 것 같다.
'안드로이드 > 잡다한 지식' 카테고리의 다른 글
[안드로이드] WifiManager에서 Deprecated된 기능들 (0) | 2023.05.22 |
---|---|
[안드로이드] AsyncTask가 Deprecated된 이유 (0) | 2023.05.19 |
[안드로이드] Compose Pager에서 swipe시 렉 (0) | 2023.05.06 |
MPAndroidChart 너는 뭐니 (1) | 2023.04.11 |
[안드로이드] 클린 아키텍처? MVVM? MVP? (0) | 2023.03.11 |