안드로이드(Kotlin)

Kotlin 코틀린의 Retrofit

영드로이드개발자 2022. 8. 26. 12:18
반응형

더보기

본 포스팅은 FastCampus - 30개 프로젝트로 배우는 Android 앱 개발 with Kotlin 초격차 패키지 를 바탕으로 학습된 내용을 요약 및 정리한 글입니다.

Retrofit

1. Retrofit 이란?

Retrofit 이란 간단하게 말하면 서버와 클라이언트 간 HTTP 통신을 할 수 있도록 도와주는 녀석이다.

 

우리들이 흔히 어플을 만들때 오픈API을 이용하여 데이터 정보를 가져오게 되는데 그때 Retrofit을 이용하면 편하게 코드를 작성할 수 있다.

 

물론 Retrofit을 사용하지 않더라도 HttpClient, Volley, OKhttp 등 통신을 편하게 할 수 있도록 도와주는 라이브러리 들이 존재 했었지만 요즘은 전부 Retrofit을 이용하는 추세이므로, HTTP 통신을 할때는 이제는 Retrofit을 이용하도록 하자.

 

 

2. Retrofit 을 사용하면?

 

빠른 성능 - OkHttp 의 3배이상의 차이가 존재

 

가독성 - Annotation 사용으로 코드의 가독성이 뛰어남

 

간단한 구현 - 반복된 작업을 라이브러리로 넘겨서 작업

 

동기/비동기 쉬운 구현 - 비동기는 응답이 도착하면 Callback으로 받고 메인스레드에서 작업을 처리

 

3. Retrofit의 구성요소

 

DTO - "Data Transfer Object" 형태의  Model이며 JSON 타입 변환에 사용됨Interface - 사용할 HTTOP CRUD 동작들을 정의해놓은 인터페이스 이다.Retrofit.Builder 클래스 - Interface를 사용할 인스턴스, baseUrl(URL) / Converter(변환기)를 설정

 

위 구성요소들의 예제는 밑에서 확인하자!

 

 

4. Retrofit 사용하기

작성한 파일 목록

1. AnroidManifest.xml

2. BookService.kt

3. Book.kt

4. SearchBooksDto.kt

5. MainActivity.kt

6. build.gradle

 

 

AnroidManifest.xml

    <uses-permission android:name="android.permission.INTERNET"/>

항상 HTTP 통신을 할때는 네트워크 접근 허락을 해주어야 한다.

 

 

build.gradle

dependencies {

    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
    
}

 

 

BookService.kt

interface BookService {
    @GET("/v1/search/book_json")
    fun getBookByName(
        @Header("X-Naver-Client-Id") id: String,
        @Header("X-Naver-Client-Secret") secretKey: String,
        @Query("query") keyword: String
    ): Call<SearchBooksDto>
}

 

Book.kt

data class Book(
    @SerializedName("isbn") val id: String,
    @SerializedName("title") val title: String,
    @SerializedName("description") val description: String
)

 

SearchBooksDto.kt

data class SearchBooksDto (
    @SerializedName("items") val books: List<Book>
    )

 

MainActivity.kt

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //retrofit 구현체가 생성이 되서 retrofit이라는 변수에 할당이 된다.
        val retrofit = Retrofit.Builder()
            .baseUrl("https://openapi.naver.com")
            .addConverterFactory(GsonConverterFactory.create())
            .build()


        val bookService = retrofit.create(BookService::class.java)

        bookService.getBookByName("GBs1ecx1hmePfrG29pdo","9JQH1LYFYQ","안드로이드")
            .enqueue(object : Callback<SearchBooksDto>{
                override fun onResponse(
                    call: Call<SearchBooksDto>,
                    response: Response<SearchBooksDto>
                ) {
                    if(response.isSuccessful.not()){
                        return
                    }

                    response.body()?.books?.forEach{
                        Log.d(TAG, it.toString())
                    }
                }

                override fun onFailure(call: Call<SearchBooksDto>, t: Throwable) {
                    TODO("Not yet implemented")
                }

            })
    }
    companion object{
        private const val TAG = "MainActivity"
    }
}

해당된 예제는 네이버 오픈API 책검색 API를 가져와서 작성하였고 HTTP 통신이 되는지만 확인한 예제이기 때문에 로그를 찍어서 데이터가 잘 넘어오는지 확인하였습니다.

 

 

이처럼 데이터가 잘 넘어 오는것을 확인하였습니다.

 

이처럼  Retrofit을 사용하기 위해서는 postman을 이용하면 편리한대, 차후 postman을 사용하는 방법에 대해서도 포스팅하겠습니다.

반응형