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를 사용하는 것이 더 좋다고 생각합니다.
참고
참고 문서
https://howtodoinjava.com/retrofit2/retrofit-sync-async-calls/
https://square.github.io/retrofit/
'2023년 이전 > Android' 카테고리의 다른 글
A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction (0) | 2021.12.05 |
---|---|
Module was compiled with an incompatible version of Kotlin (0) | 2021.12.05 |
Activity 동작 및 Flag (0) | 2021.12.03 |
Camera 촬영 후 해상도가 낮아지는 현상 해결 방법 (1) | 2021.12.03 |
ViewPager2에서 ui 업데이트 방법 (0) | 2021.12.03 |