Retrofit은 안드로이드에서 네트워크 통신을 쉽게 구현할 수 있도록 도와주는 오픈 소스 라이브러리입니다. Retrofit은 HTTP API를 호출하기 위한 인터페이스를 정의하고, 이를 기반으로 실제로 네트워크 호출을 수행합니다. 이를 통해 안드로이드 앱에서 서버와의 통신을 간단하게 처리할 수 있습니다.
Retrofit은 OkHttp 라이브러리 위에 구축되어 있으며, Gson, Jackson, Moshi 등의 JSON 파서를 사용하여 서버의 응답을 파싱할 수 있습니다. 또한, RxJava와 함께 사용할 수 있어 비동기적인 네트워크 호출을 처리할 수 있습니다.
Retrofit 장점
3가지 구성요소
DTO(POJO) - Data Transfer Object , plain Old Java Object 형태의 모델 / JSON 타입 변환에 사용
Interface - 사용할 HTTP CRUD 동작들을 정의해놓은 인터페이스
*CRUD (Create / Read / Update / Delete) -> HTTP Method(POST / GET / PUT / DELETE)
Retrofit.Builder Class - Interface를 사용할 인스턴스, baseUrl(URL) / Converter(변환기) 설정
Retrofit을 사용하기 위해서는 다음과 같은 단계가 필요합니다.
의존성 추가: build.gradle 파일에 Retrofit과 Gson 등의 라이브러리 의존성을 추가합니다.
API 인터페이스 생성: REST API를 호출하기 위한 인터페이스를 정의합니다.
// 예시 코드
interface ApiService {
@GET("users/{username}")
fun getUser(@Path("username") username: String):Call<User>
}
// 예시 코드
object ApiClient {
private const val BASE_URL = "https://api.github.com/"
fun getApiService(): ApiService {
val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
return retrofit.create(ApiService::class.java)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
textView = findViewById(R.id.text_view)
val apiService = ApiClient.getApiService()
val call = apiService.getUser("google")
call.enqueue(object : Callback<User> {
override fun onResponse(call: Call<User>, response: Response<User>) {
if (response.isSuccessful) {
val user = response.body()
textView.text = user?.name
}
}
override fun onFailure(call: Call<User>, t: Throwable) {
Log.e("MainActivity", "Failed to get user", t)
}
})
}
}
Retrofit을 사용시 주의사항
Permission: Retrofit을 사용하려면 인터넷 퍼미션이 설정되어 있어야 합니다. AndroidMainfest.xml 파일에서 권한을 설정해야 합니다.
Thread 관리: Retrofit은 기본적으로 네트워크 작업을 비동기적으로 처리합니다. 따라서 메인 스레드에서 네트워크 요청을 보내면 ANR(Application Not Responding)이 발생할 수 있습니다. 메인 스레드에서 네트워크 작업을 처리하지 않도록 주의해야합니다.
오류 및 예외 처리: 서버와 통신할 때는 오류가 발생할 수 있습니다. Retrofit에서는 오류를 처리하기 위해 Callback 인터페이스를 제공합니다. onResponse() 메서드에서는 성공적인 응답을 처리하고, onFailure() 메서드에서는 오류 처리를 합니다.
API EndPoint 주의: Retrofit을 사용하여 서버와 통신할 때 API EndPoint가 정확해야 합니다.