언어 및 도구들 공부/Java

Retrofit 라이브러리

Dr.Mlem 2024. 9. 30. 13:00

Q.
retrofit 은 뭐하는 라이브러리야?



Retrofit은 AndroidJava 애플리케이션에서 HTTP API와 상호작용하기 위해 사용되는 네트워크 라이브러리입니다. 주로 REST API 호출을 간편하게 할 수 있도록 도와주며, 특히 JSON과 같은 형식의 데이터를 처리하는 데 유용합니다.

Retrofit의 주요 기능과 특징은 다음과 같습니다:

  1. API 호출 인터페이스 정의: Retrofit은 API 요청을 메서드 호출로 매핑합니다. 이를 위해 인터페이스를 정의한 후 Retrofit이 이 인터페이스를 구현하여 HTTP 요청을 처리합니다.
    java

    public interface ApiService {
        @GET("/users/{user}")
        Call<User> getUser(@Path("user") String userId);
    }

  2. 다양한 HTTP 메서드 지원: Retrofit은 GET, POST, PUT, DELETE, PATCH 등의 HTTP 메서드를 지원하여 다양한 형태의 HTTP 요청을 보낼 수 있습니다.

    java

    @POST("/users")
    Call<User> createUser(@Body User user);

  3. JSON 및 XML 데이터 자동 변환: Gson, Jackson, Moshi 등의 라이브러리를 함께 사용하여 서버에서 받은 JSON 데이터를 자바 객체로 자동 변환할 수 있습니다. 반대로 자바 객체를 JSON으로 변환해 서버로 보낼 수도 있습니다.

    java

     
    Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://api.example.com/")
        .addConverterFactory(GsonConverterFactory.create())
        .build();

  4. 비동기 및 동기식 요청 지원: Retrofit은 비동기식 API 호출을 기본으로 제공하며, 콜백을 통해 서버의 응답을 처리할 수 있습니다. 동기식 요청도 가능하지만, 비동기 호출이 더 자주 사용됩니다.

    java
    // 비동기 요청
    Call<User> call = apiService.getUser("123");
    call.enqueue(new Callback<User>() {
        @Override
        public void onResponse(Call<User> call, Response<User> response) {
            // 성공적으로 응답 받음
        }

        @Override
        public void onFailure(Call<User> call, Throwable t) {
            // 실패 처리
        }
    });

  5. RxJava와의 통합: Retrofit은 RxJava와 함께 사용할 수 있습니다. 이를 통해 비동기 네트워크 요청을 더욱 쉽게 처리할 수 있으며, Observable, Flowable 등의 RxJava 컴포넌트와 함께 사용할 수 있습니다.

    java
    public interface ApiService {
        @GET("/users/{user}")
        Observable<User> getUser(@Path("user") String userId);
    }

  6. OkHttp와의 통합: Retrofit은 내부적으로 OkHttp라는 HTTP 클라이언트를 사용합니다. OkHttp는 네트워크 요청을 효율적으로 관리하는 라이브러리로, 요청을 추가로 커스터마이징하거나 캐시, 로깅, 인터셉터 등을 사용할 수 있게 해줍니다.

    java
    OkHttpClient okHttpClient = new OkHttpClient.Builder()
        .addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
        .build();

    Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://api.example.com/")
        .client(okHttpClient)
        .addConverterFactory(GsonConverterFactory.create())
        .build();

  7. 동적 URL 지원: 엔드포인트가 변동적인 경우에도 @Path나 @Query 애노테이션을 통해 URL을 동적으로 구성할 수 있습니다.

Retrofit을 사용하면 네트워크 통신을 간편하고 구조적으로 처리할 수 있기 때문에, 특히 모바일 애플리케이션 개발에서 많이 사용됩니다. HTTP 요청과 응답의 복잡성을 추상화하여 개발자가 API 호출에 집중할 수 있도록 돕습니다.