본문 바로가기
2023년 이전/Android

Retrofit call 과 Response 차이

by JeongUPark 2021. 12. 5.
반응형

Android 개발 시 네트워크 작업할 때 가장 많이 쓰이는 라이브러니는 Retrofit 입니다.

(Retrofit의 상세 내용은 https://square.github.io/retrofit/ 여기서 확인하면 됩니다)

 

여기서 알아볼 내용은 Retrofit을 사용할 때 서버로부터 응답을 받을 경우 call을 통해 받을 때와 response를 통하여 받을 때의 차이입니다.

 

call은 일반적으로 retrofit을 사용하여 서버로부터 응답을 받을 때 사용되는 기본 방법 입니다.

retrofit을 사용하여 통신을 할 경우 다음과 같이 할 수 있습니다. (설명은 retrofit 홈페이지의 예제를 기준으로 하겠습니다.)

 

public interface GitHubService {
  @GET("users/{user}/repos")
  Call<List<Repo>> listRepos(@Path("user") String user);
}

위와 같이 셋팅을 하고 

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("https://api.github.com/")
    .build();

GitHubService service = retrofit.create(GitHubService.class);

이렇게 작업 한 후에

 

Call<List<Repo>> repos = service.listRepos("octocat");
repos.enqueue(new Callback<List<Repo>>() {
	@Override
            public void onResponse(Call<List<Repo>> call, Response<List<Repo>> response) {
            }

            @Override
            public void onFailure(Call<List<Repo>> call, Throwable t) {

            }
}

이렇게 작업할 수 있습니다.

Response를 사용한다면 다음과 같이 작업 할 수 있습니다.

Call<List<Repo>> repos = service.listRepos("octocat");
try{
	Response<List<Repo>> response = repos.execute();
    List<Repo> apiResponse = response.body();
}catch(Exception ex){
	ex.printStackTrace();
}

위 두가지 경우의 차이점을 보면 call을 사용하면 명시적으로 성공과  실패가 나눠져서 그에 따른 동작을 처리할 수 있수 있습니다.

반면 response를 추가로 이용한다면 다 간략한 코드로 서버로 부터 데이터를 받아 올 수 있습니다.

 

각각의 장담점이 있는데, 제가 생각할때는  비동기 실행을 위해 coroutines 나 Rxjava (or Rxkotlin)을 사용할 경우 enqueue callback 보다는 response를 사용하는 것이 더 좋다고 생각합니다.

 

참고

Call 관련 문서

 

Call (Retrofit 2.7.1 API)

An invocation of a Retrofit method that sends a request to a webserver and returns a response. Each call yields its own HTTP request and response pair. Use clone() to make multiple calls with the same parameters to the same webserver; this may be used to i

square.github.io

Response 관련문서

 

Retrofit 2.7.1 API

 

square.github.io

 

 

참고 문서

https://howtodoinjava.com/retrofit2/retrofit-sync-async-calls/

https://square.github.io/retrofit/

 

Retrofit

A type-safe HTTP client for Android and Java

square.github.io

 

반응형