[kotlin] 코틀린에서 제네릭을 사용하여 네트워크(Network)를 다루는 방법은 어떻게 되는가?

가장 많이 쓰이는 방법 중 하나는 Retrofit 라이브러리를 사용하는 것입니다. Retrofit은 안드로이드와 자바 애플리케이션에서 네트워킹 코드를 작성하는 데 사용되며, 코틀린에서도 쉽게 활용 가능합니다.

우선, build.gradle 파일에 Retrofit과 함께 사용할 Gson 라이브러리를 추가합니다.

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

다음으로, 네트워크 요청과 응답을 처리할 모델 클래스를 만듭니다. 이때, 제네릭을 사용하여 유연한 데이터 모델을 정의할 수 있습니다.

data class ApiResponse<T>(val data: T)

이후, Retrofit 인터페이스를 정의하고 Call 타입을 이용하여 제네릭으로 데이터 모델을 전달합니다.

interface ApiInterface {
    @GET("data")
    fun getData(): Call<ApiResponse<DataModel>>
}

마지막으로, Retrofit 인스턴스를 생성하고 네트워크 요청을 처리하는 코드를 작성합니다.

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

val apiInterface = retrofit.create(ApiInterface::class.java)

val call: Call<ApiResponse<DataModel>> = apiInterface.getData()
call.enqueue(object : Callback<ApiResponse<DataModel>> {
    override fun onResponse(call: Call<ApiResponse<DataModel>>, response: Response<ApiResponse<DataModel>>) {
        val data: DataModel? = response.body()?.data
        // Handle the data
    }

    override fun onFailure(call: Call<ApiResponse<DataModel>>, t: Throwable) {
        // Handle errors
    }
})

이렇게 제네릭을 사용하여 코틀린에서 네트워크를 다룰 수 있습니다. 여기서는 Retrofit을 사용한 예제를 보여주었지만, 다른 라이브러리를 사용하여도 마찬가지로 제네릭을 활용할 수 있습니다.