안드로이드 Retrofit

채상엽·2022년 5월 10일
0

Android

목록 보기
6/6

layout: post
title: "Retrofit"
date: 2021-12-19T14:25:52-05:00
author: sangyeop
categories: Android


Retrofit 정리

Retrofit 이란?


  • TypeSafeHttpClient 라이브러리
    • TypeSafe란? : ****네트워크로부터 전달된 데이터를 우리 프로그램에서 필요한 형태의 객체로 받을 수 있다는 것을 의미
  • OkHttp에 의존하고 있다
    • OkHttp란? : REST API, HTTP 통신을 간편하게 사용할 수 있도록 만들어진 자바 라이브러리

Http 개발의 어려움


Http 통신을 가장 간단하게 사용하는 방법으로는 HttpURLConnection 이라는 자바 내장기능을 이용하는 방법이 있다. 그러나 이를 사용하여 기능을 구현하기 위해서는 다음과 같은 사항들을 고려해야한다.

  • 연결
  • 캐싱
  • 실패한 요청의 재시도
  • 스레딩
  • 응답 분석
  • 오류 처리

위와 같은 사항들을 개발자가 모두 처리해야한다는 의미이다.

그래서 이를 쉽게 처리하기 위해 나온 라이브러리들이 바로 Retrofit OkHttp Volley 와 같은 라이브러리들이다.

Retrofit의 사용법


  1. dependency(build.gradle) 추가

    1. 결과를 객체로 반환 받기 위해서는 gson 라이브러리도 함께 추가하여야 한다.
  2. 인터페이스에 HTTP API 기술

    public interface TestService {
    	@GET("/api/users/2")
    	Call<Object> getTest();
    }

    retrofit은 인터페이스에 기술된 명세를 Http API 로 전환해 준다. 따라서 우선 우리가 요청할 API들에 대한 명세를 인터페이스에 기술해두면 좋다.

API Annotation
GET POST DELETE PUT 지원

반환타입
Call<객체타입> 의 형태로 기술해야 한다.

  1. HTTP API 인터페이스의 구현체 생성
public class RetrofitClient {
		private static final String Base_URL = "http://reqres.in/";
		
		public static TestService getApiService(){
				return getInstance().create(TestService.class);
		}
		
		private static Retrofit getInstance(){
				Gson gson = new GsonBuilder()
												.setLenient()
												.create();

				return new Retrofit.Builder()
												.baseUrl(BASE_URL)
												.addConverterFactory(GsonConverterFactory.create(gson))
												.build();
		}
}
  • BASE_URL
    • 요청할 서버의 기본 URL
      • 마땅한 서버가 없다면 [https://reqres.in/](https://reqres.in/) 과 같은 Open REST API TEST 서버를 이용하는 것도 좋은 방법
  • getInstance()
    • setLenient() 설정이 된 Gson 객체를 생선한다
      • 이는 Json 응답을 객체로 변환하기 위해 필요하다.
    • Retrofit.Builder() 를 이용해 baseUrl() 설정, 응답을 객체로 변환하기 위해 GsonConverter 설정을 하여 Retrofit Client를 생성
  • getApiService
    • 앞서 구현한 getInstance() 메소드를 이용해 Retrofit 클라이언트를 생성한 뒤, Retrofit 클라이언트를 이용해, Http API 명세가 담긴 인터페이스의 구현체를 생성한 뒤 반환한다.
  1. 동기 호출 ( 결과값 받기 )

    public class MainTest {
    		public static void main(String[] args) {
    				Call<Object> getTest = RetrofitClient.getApiService().getTest();
    				try{
    						System.out.println(getTest.execute().body());
    				} catch (IOExeption e) {
    						e.printStackTrace();
    				}
    		}
    }

    앞서 생성한 HTTP API 명세가 담긴 인터페이스에 getTest() 메소드의 결과값을 Call<Object>로 지정했기 때문에, 결과값 또한 Call<Object>에 담아준다. 이후 결과값이 담긴 객체의 execute() 메소드를 호출하면 요청이 전달된다.

해당 링크의 내용임 : [https://galid1.tistory.com/617

profile
프로게이머 연습생 출신 주니어 서버 개발자 채상엽입니다.

0개의 댓글