Android

[Android] Kotlin Retrofit2 사용법

izongg 2023. 5. 31. 20:19
반응형

배운지는 꽤 됐지만 다시 복습삼아 Retrofit2 내용을 정리해보려한다.

 

사용 방법은

https://square.github.io/retrofit/

 

Retrofit

A type-safe HTTP client for Android and Java

square.github.io

여기에 나와있지만, 난 영어를 보고 저걸 이해할 수가 없었다.

 

-ChatGPT

Kotlin Retrofit2란,  안드로이드 앱에서 서버와의 통신을 쉽게 처리하기 위한 라이브러리이다.
Retrofit2는 Square사에서 개발한 HTTP 클라이언트 라이브러리로, RESTful API와의 통신을 단순화하고 추상화하는 기능을 제공한다.

Retrofit2의 핵심 개념 중 하나는 인터페이스 기반의 API 정의입니다. 개발자는 서버의 엔드포인트(Endpoint)와 요청 방식(GET, POST, PUT, DELETE 등)에 따른 메서드를 인터페이스에 정의합니다. 이렇게 정의한 인터페이스를 Retrofit2가 구현체로 만들어주어 통신을 처리합니다.

쉽게 말하면 Retrofit2는 API를 호출하여 불러운 데이터를 GET, POST, PUT, DELETE 등을 사용하여 관리하는 라이브러리이다.

 

외부 API를 호출하는 것이기 때문에 사전에 Manifest파일에서 Internet을 허용해야한다.

 

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

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

 

그리고 

Gradle파일에 종속성을 추가한다. 위의 Retrofit 홈페이지에 나와있다. 버전은 때에 맞게 수정하도록 한다.

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

 

이제 시작이다.

 

먼저 Retrofit2 를 편리하게 사용하기 위해 인스턴스를 생성한다. 바로 Activity 파일에 작성 해도 되지만 사용 편리성을 위해 따로 파일로 작성하였다.

데이터는 API를 테스트 해볼 수 있는 가상데이터는 jsonplaceholder 의 데이터를 사용하였다.

RetrofitInstance.kt

object RetrofitInstance {

    val BASE_URL ="https://jsonplaceholder.typicode.com/"

    val client = Retrofit
        .Builder()
        .baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create()).build()


    fun getInstance(): Retrofit{
        return client
    }
}

다음은 API 인터페이스를 정의한다.

MyAPI.kt

interface MyApi {

    @GET("posts/1")
    suspend fun getPost1() : Post
    
    @GET("posts/{number}")
    suspend fun getPostNumber(
        @Path("number") number : Int
    ) : Post
    
    }

이는 서버로부터 jsom 형식의 데이터를 가져오는 간단한 GET에 대한 예제이다.

데이터가 어떻게 생겼는지는 위의 BASE_URL에 posts/1을 붙여서 검색해보면 나온다.

 

아래의 getPostNumber은 입력을 받도록 하여, 더 동적으로 데이터를 불러오기 위한 방법이다.

 

이제 사용해보자.

 

MainActivity.kt

class MainActivity : AppCompatActivity() {


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

	val retrofitInstance = RetrofitInstance.getInstance().create(MyApi::class.java)
    
        retrofitInstance.getPost1().enqueue(object : Callback<Post>{
            override fun onResponse(call: Call<Post>, response: Response<Post>) {
                // 성공하였을 시
            }

            override fun onFailure(call: Call<Post>, t: Throwable) {
                // 실패하였을 시
            }


        })
       
       
    }
}

이렇게 미리 생성해둔 인스턴스를 불러와서 Callback함수로 외부 API를 호출할 수 있다.

중간에 들어가는 Post는 불러 올 데이터에 맞게 데이터 클래스를 만들어 놓은 것을 사용한 것이다.

이제 onResponse에서 받아온 데이터를 활용만 하면 된다.

 

이 작업은 비동기적으로 처리된다.

그러므로 이것을 동기적으로 처리하거나 더 다양하게 다루기 위해서는 ViewModel이나 Coroutine 등의 방법등을 결합하여 사용해야한다.

 

그리고 불러온 데이터를 RecyclerView 등을 활용해 출력해볼수도 있다.

 

 


reference:

https://square.github.io/retrofit/

 

Retrofit

A type-safe HTTP client for Android and Java

square.github.io

 

 

반응형