[kotlin] 안드로이드에서의 코틀린 웹 서비스 호출하기

안드로이드 앱을 개발할 때, 때로는 웹 서비스와의 통신이 필요하다. 이를 위해 안드로이드 앱에서 코틀린을 사용해서 웹 서비스를 호출하는 방법을 알아보자.

1. 네트워크 권한 설정

안드로이드 매니페스트 파일에 네트워크 권한을 추가해야 한다.

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

2. 네트워크 통신 설정

AndroidManifest.xml에 네트워크 권한을 추가했다면, 앱에서 네트워크 통신을 위해 HttpURLConnection이나 Retrofit과 같은 라이브러리를 사용할 수 있다.

2.1 HttpURLConnection을 사용한 예제

import java.net.HttpURLConnection
import java.net.URL

val url = URL("https://api.example.com/data")
val connection = url.openConnection() as HttpURLConnection
connection.requestMethod = "GET"

val responseCode = connection.responseCode
if (responseCode == HttpURLConnection.HTTP_OK) {
    val inputStream = connection.inputStream
    // 응답을 처리하는 코드
} else {
    // 오류 처리 코드
}
connection.disconnect()

2.2 Retrofit을 사용한 예제

Retrofit은 네트워크 통신을 간편하게 처리할 수 있는 라이브러리다. 먼저 build.gradle에 Retrofit 라이브러리를 추가해야 한다.

implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
interface ApiService {
    @GET("data")
    fun getData(): Call<Data>
}

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

val apiService = retrofit.create(ApiService::class.java)
val call = apiService.getData()
call.enqueue(object : Callback<Data> {
    override fun onResponse(call: Call<Data>, response: Response<Data>) {
        // 응답을 처리하는 코드
    }

    override fun onFailure(call: Call<Data>, t: Throwable) {
        // 오류 처리 코드
    }
})

3. 스레드 처리

네트워크 통신은 메인 스레드에서 수행해서는 안된다. 안드로이드에서는 네트워크 통신을 백그라운드 스레드에서 처리해야 한다.

3.1 AsyncTask를 사용한 예제

class NetworkTask : AsyncTask<URL, Void, String>() {
    override fun doInBackground(vararg urls: URL): String {
        val url = urls[0]
        val connection = url.openConnection() as HttpURLConnection
        // 네트워크 요청 코드
        return response
    }

    override fun onPostExecute(result: String) {
        // 결과 처리 코드
    }
}

val url = URL("https://api.example.com/data")
val networkTask = NetworkTask()
networkTask.execute(url)

안드로이드에서 코틀린을 사용해 웹 서비스를 호출하는 간단한 예제를 살펴보았다. 네트워크 통신은 사용자 경험에 영향을 미칠 수 있는 중요한 요소이므로 안정성을 고려하여 적절히 처리해야 한다.

참고 자료