오늘은 심화과정 강의를 전부 들었다.
위치정보를 활용하는 방법과 Retrofit에 관한 것이었는데 매우매우 유용한 내용이어서 활용할 생각에 조금 설렜던 것 같다.
공공데이터포털은 예전에 직장생활 할 때 종종 이용하곤 했던 곳인데 이런 식으로 활용하게 되니 활용 방식이 무궁무진한 것 같았다.
시간만 많으면 여러가지로 실습을 해보고 싶은 생각이 들었다.
이를테면 모범음식점 현황이 있다 치면 현위치 정보를 받아와 근처의 맛집 리스트를 뿌려준다거나 이름을 검색해볼 수 있다거나 하는 식으로 말이다.
어쨌거나 간단하게 retrofit에 관해 복습할 겸 정리해봐야겠다.
► REST API란 Representational State Transfer / Application Programming Interface의 약자로 앱이 요청할 수 있는 프로그래밍 가능한 의사소통 가능한 접점을 웹의 장점을 최대한 활용할 수 있는 형태로 구현한 아키텍처 스타일을 말한다. WWW가 이 기반으로 구성되어 있다.
► 서버가 전송하는 데이터 교환 방식은 JSON(JavaScript Object Notation)이고, 이걸 프로그래밍 언어의 객체로 변환할 때 사용하는 것이 Gson이다.
interface ApiService {
@GET("users/{id}")
fun getUser(@Path("id") id: Int): Call<User>
}
val retrofit = Retrofit.Builder()
.baseUrl("https://api.example.com/")
.addConverterFactory(GsonConverterFactory.create())
.build()
val apiService = retrofit.create(ApiService::class.java)
apiService.getUser(id).enqueue(object: Callback<User> {
override fun onResponse(call: Call<User>, response: Response<User>) {
// 처리
}
override fun onFailure(call: Call<User>, t: Throwable) {
// 오류 처리
}
})
콜백을 사용하여 백그라운드에서 실행되는 비동기식 요청이다. 응답이 오면 해당 콜백이 호출된다.
if (response.isSuccessful) {
val user: User? = response.body()
} else {
// 오류 메시지 처리
val error: String = response.errorBody()?.string() ?: "Unknown error"
}
response 객체를 통해 HTTP 응답의 여러 정보에 접근할 수 있다.
override fun onFailure(call: Call<User>, t: Throwable) {
// 오류 메시지 표시
Log.e("API_ERROR", t.message ?: "Unknown error")
}
Retrofit의 onFailure 콜백은 네트워크 오류나 데이터 변환 오류 등에서 호출된다.
아무래도 하나 주제를 정해서 실습을 하나 해봐야겠다. 챌린지반 과제도 한참 밀렸는데 이게 맞는지 모르겠다.
미세먼지 앱 만드는 실습을 보며 다시 한번 retrofit과 관련된 것들을 정리해봐야될 것 같다.
내일은 과제 틀을 빠르게 끝내고 다음 단계로 넘어가야겠다.