Retrofit + OkHttp + Coroutine 날씨 공공데이터 API 예제 - 3(Domain)
2022. 10. 8. 04:54ㆍandroid/날씨공공데이터앱
전 편이 궁금하신 분들은 아래에 링크로 ㄱㄱ
2022.10.07 - [분류 전체보기] - Retrofit + OkHttp + Coroutine 날씨 공공데이터 API 예제 - 2
이번 글에서는 Domain 영역을 어떻게 만들었는지 적으려고 합니다.
부족한 글 봐주셔서 감사합니다.
Domain 영역입니다.
WeatherRepository
Retrofit2를 이용하여 통신을 할 것이고
1. getWeather 함수는 날씨 공공 데이터에서 받아올 단기예보를 위한 함수입니다.
2. getCurrentWeather 함수는 현재 시간의 날씨를 받아오기 위한 함수입니다.
둘 다 반환 값은 Resource입니다.
Resource
반환값으로 사용할 Resource 클래스입니다.
LocationTracker
아래는 위치서비스를 이용하기 위한 인터페이스 LocationTracker입니다.
반환 값으로 나중에 사용할 동네를 알기위한 주소와 Location 값이 있습니다.
WeatherData
각 화면에 보여줄 정보들이 들어있는 Data class입니다.
WeatherMap
아래는 나중에 받아올 이틀 동안의 날씨가 담길 Map입니다.
map의 Key는 당일날 , 다음날 이렇게 들어가고 Value의 List <WeatherData> 에는
WeatherData가 시간 기준으로 들어있습니다.
오늘 , 07시 날씨 Data, 08시 날씨 Data, 09시 날씨, --- 이런 식으로
내일 , 00시 날씨, 01시 날씨, 02시 날씨, --- 이렇게 저장됩니다.
WeatherClassfication
아래는 날짜별 category를 그림과 멘트로 분류하는 클래스입니다.
package com.dev_musashi.weather.domain.data
import androidx.annotation.DrawableRes
import com.dev_musashi.weather.R.drawable as AppImg
sealed class WeatherClassification(
val desc: String,
@DrawableRes val iconRes: Int
) {
object Sunny : WeatherClassification(
desc = "맑음",
iconRes = AppImg.ic_sunny
)
object Cloudy : WeatherClassification(
desc = "구름낀 하늘",
iconRes = AppImg.ic_cloudy
)
object FullCloudy : WeatherClassification(
desc = "흐림",
iconRes = AppImg.ic_fullcloudy
)
object SunnyNight : WeatherClassification(
desc = "맑은 밤",
iconRes = AppImg.ic_night_clear
)
object CloudyNight : WeatherClassification(
desc = "약간 흐린 밤",
iconRes = AppImg.ic_night_cloudy
)
object Rainy : WeatherClassification(
desc = "비",
iconRes = AppImg.ic_rain
)
object RainAndSnow : WeatherClassification(
desc = "비&눈",
iconRes = AppImg.ic_snow_rain_mix
)
object Snow : WeatherClassification(
desc = "눈",
iconRes = AppImg.ic_snow_rain_mix
)
object Shower : WeatherClassification(
desc = "소나기",
iconRes = AppImg.ic_showers
)
object Drizzling : WeatherClassification(
desc = "빗방울",
iconRes = AppImg.ic_raindrops
)
object Sleet : WeatherClassification(
desc = "빗방울눈날림",
iconRes = AppImg.ic_sleet
)
object SnowBlizzard : WeatherClassification(
desc = "눈날림",
iconRes = AppImg.ic_snow_wind
)
companion object {
fun fromCategory(classification: String): WeatherClassification {
return when (classification) {
"맑음" -> Sunny
"구름 많음" -> Cloudy
"흐림" -> FullCloudy
"밤맑음" -> SunnyNight
"밤구름 많음" -> CloudyNight
"비" -> Rainy
"비/눈" -> RainAndSnow
"눈" -> Snow
"소나기" -> Shower
"빗방울" -> Drizzling
"빗방울눈날림" -> Sleet
"눈날림" -> SnowBlizzard
else -> Sunny
}
}
}
}
Usecase
usecase는 굳이 안 만들어도 괜찮았겠지만 그래도 만들었습니다.
구현은 아래와 같습니다.
다음편에서는 Repository를 작성해보겠습니다.
'android > 날씨공공데이터앱' 카테고리의 다른 글
Retrofit + OkHttp + Coroutine 날씨 공공데이터 API 예제 - 3(Data) (0) | 2022.10.08 |
---|---|
Retrofit이란 무엇이고, Retrofit을 이용한 공공데이터 API ( 날씨 ) + Hilt로 DI + MVVM 구조로 만드는 기본적인 과정의 이해 (0) | 2022.09.28 |