[Android] Retrofit2이란?

HEETAE HEO·2022년 5월 4일
0

Android

목록 보기
9/12
post-thumbnail

Retrofit 이란?

Retrofit은 안드로이드에서 네트워크 통신을 쉽게 구현할 수 있도록 도와주는 오픈 소스 라이브러리입니다. Retrofit은 HTTP API를 호출하기 위한 인터페이스를 정의하고, 이를 기반으로 실제로 네트워크 호출을 수행합니다. 이를 통해 안드로이드 앱에서 서버와의 통신을 간단하게 처리할 수 있습니다.

Retrofit은 OkHttp 라이브러리 위에 구축되어 있으며, Gson, Jackson, Moshi 등의 JSON 파서를 사용하여 서버의 응답을 파싱할 수 있습니다. 또한, RxJava와 함께 사용할 수 있어 비동기적인 네트워크 호출을 처리할 수 있습니다.

Retrofit 장점

  1. 간단한 인터페이스: REST API를 호출하기 위한 인터페이스를 정의하면, Retrofit이 이를 기반으로 실제 HTTP 호출을 처리합니다.
  2. 자동으로 JSON 파싱: Gson, Jackson, Moshi 등의 JSON 파서를 사용하여 서버의 응답을 자동으로 파싱합니다.
  3. 비동기적인 호출: RxJava와 함께 사용하면 비동기적인 네트워크 호출을 쉽게 처리할 수 있습니다.
  4. 쉬운 오류 처리: HTTP 오류 응답을 처리하기 위한 콜백을 제공하여, 서버 오류 처리를 쉽게 할 수 있습니다.

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을 사용하기 위해서는 다음과 같은 단계가 필요합니다.

  1. 의존성 추가: build.gradle 파일에 Retrofit과 Gson 등의 라이브러리 의존성을 추가합니다.

  2. API 인터페이스 생성: REST API를 호출하기 위한 인터페이스를 정의합니다.

// 예시 코드 
interface ApiService {

    @GET("users/{username}")
    fun getUser(@Path("username") username: String):Call<User>
}
  1. Retrofit 객체 생성: Retrofit.Builder를 사용하여 Retrofit 객체를 생성합니다.
// 예시 코드 
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)
    }
  1. API 호출: API 인터페이스를 사용하여 서버에 API를 호출합니다.
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을 사용시 주의사항

  1. Permission: Retrofit을 사용하려면 인터넷 퍼미션이 설정되어 있어야 합니다. AndroidMainfest.xml 파일에서 권한을 설정해야 합니다.

  2. Thread 관리: Retrofit은 기본적으로 네트워크 작업을 비동기적으로 처리합니다. 따라서 메인 스레드에서 네트워크 요청을 보내면 ANR(Application Not Responding)이 발생할 수 있습니다. 메인 스레드에서 네트워크 작업을 처리하지 않도록 주의해야합니다.

  3. 오류 및 예외 처리: 서버와 통신할 때는 오류가 발생할 수 있습니다. Retrofit에서는 오류를 처리하기 위해 Callback 인터페이스를 제공합니다. onResponse() 메서드에서는 성공적인 응답을 처리하고, onFailure() 메서드에서는 오류 처리를 합니다.

  4. API EndPoint 주의: Retrofit을 사용하여 서버와 통신할 때 API EndPoint가 정확해야 합니다.

profile
Android 개발 잘하고 싶어요!!!

0개의 댓글