코틀린(Kotlin)/TIL
[코틀린(Kotlin)] 레트로 핏(Retrofit)
초보왕보초
2024. 1. 29. 21:59
728x90
1. 레트로핏(Retrofit) 이란?
- Retrofit은 Square Inc. 에서 개발한 안드로이드 및 자바를 위한 타입-세이프한 HTTP 클라이언트 라이브러리이다.
- REST API의 HTTP 요청을 자바 인터페이스로 변환하는 것을 주목적으로 한다.
2. Retrofit의 장점
- 코드의 간결성
- 복잡한 HTTP API 요청을 쉽고 간결하게 만들 수 있다
- 간단한 어노테이션을 통해 요청 메서드와 URL을 정의할 수 있다 - 안정성과 확장성
- 내부적으로 OkHttp 라이브러리를 사용하여 통신, 이를 통해 안정적인 통신이 가능하다.
- 인터셉터를 사용하여 요청/응답 프로세스를 확장하거나 수정할 수 있다. - 다양한 플러그인과 컨버터 지원
- 다양한 데이터 형식(Json, XML 등)에 대해 데이터 변환 컨버터를 제공한다
- RxJava, Coroutines와 같은 비동기 프로그래밍 라이브러리와 연동 가능하다
3. Retrofit 시작하기
3-1. Gradle에 Retrofit 라이브러리 추가
dependencies {
...
implementation("com.squareup.retrofit2:retrofit:2.9.0")
implementation("com.squareup.retrofit2:converter-gson:2.9.0") // Gson 컨버터 추가
}
3-2. API 인터페이스 정의
interface NetWorkInterface {
@GET("(요청주소)get~~~~")
// User는 서버 응답으로 받아올 예시 데이터 모델 클래스
suspend fun getUser(@QueryMap param: HashMap<String, String>): User
}
3-3. Retrofit 인스턴스 생성
private val dustRetrofit = Retrofit.Builder()
.baseUrl("API 서비스 URL")
.addConverterFactory(GsonConverterFactory.create())
.client(createOkHttpClient())
.build()
val apiService = retrofit.create(ApiService::class.java)
이제 apiService 객체를 통해 정의된 API 요청을 사용할 수 있다
4. 응답 처리하기
동기식 vs 비동기식 요청하기
동기식 요청
: 현재 스레드에서 실행되며, 응답이 올 때까지 다음 코드의 실행이 중단된다
val response: Response<User> = apiService.getUser(id).execute()
비동기식 요청
: 콜백을 사용하여 백그라운드에서 실행되며, 응답이 오면 해당 콜백이 호출된다
apiService.getUser(id).enqueue(object: Callback<User>{
override fun onResponse(call: Call<User>, response: Response<User>){
// 처리
}
override fun onFailure(call: Call<User>, r: Throwable){
// 오류 처리
}
})
응답 객체 사용하기
Response 객체를 통해 HTTP 응답의 여러 정보에 접근할 수 있다
if(response.isSuccessful) {
val user: User? = response.body()
} else {
// 오류 메시지 처리
val error: String = response.errorBody()?.string() ?: "Unknown error"
}
오류 처리하기
Retrofit의 onFailure 콜백은 네트워크 오류나 데이터 변환 오류 등에서 호출된다
override fun onFailure(call: Call<User>, t: Throwable) {
// 오류 메시지 표시
Log.e("API_ERROR", t.message ?: "Unknown error")
}
728x90