이번 포스팅은 안드로이드 개발에서 네트워크 통신을 위해 정말 많이 사용하는 Retrofit Library로 통신하는 3가지 방법에 대해 소개합니다. Retrofit 사용에 관한 자세한 설명은 하지 않습니다.

Setup

우선 Library들을 사용하기 위해서 dependency를 추가해 주면 됩니다.

dependencies {
    ...
    // retrofit - required
    implementation "com.squareup.retrofit2:retrofit:2.7.2"
    // gson converter - required
    implementation 'com.squareup.retrofit2:converter-gson:2.7.2'

		// rxjava를 사용할 때 추가
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.6.2'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'

		// coroutine를 사용할 때 추가
    implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.2.0"
}

그리고 java8 활성화를 위해 아래 코드도 추가합니다.

android {
	  ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

예제 설명

예제는 네이버영화 api 입니다.

검색 API 영화 검색 개발가이드

예제를 따라 하려면 Client IDClient Secret을 발급 받아야 합니다.

애플리케이션 - NAVER Developers

영화 제목을 검색하면 이렇게 json string을 표시하도록 하겠습니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8ee431c7-b6fb-431c-9759-b8532cfd88c5/Untitled.png

공통 코드

응답 모델과 ui는 같기 때문에 같은 코드를 사용 합니다.

Callback

Callback 방식은 Retrofit에서 기본으로 제공해주는 방식 입니다.

NaverApi.kt

Callback 방식에서는 return type이 Call 입니다.

interface NaverApi {
    @GET("v1/search/movie.json")
    fun getMovie(@Query("query") query: String): Call<NaverMovieResponse>
}

NetworkService.kt

Retrofit 객체 생성과 api 생성을 NetworkService.kt에서 합니다. 이 코드는 Coroutine에서 동일하게 사용합니다.