HttpUrlConnection
HttpUrlConnection은 HTTP 통신을 위해 사용하는 가장 기본적인 클래스로 UrlConnection 클래스를 상속하며 abstract class입니다.
HttpUrlConnection은 URLConnection 클래스와 마찬가지로 생성자가 protected로 선언되어있기 때문에 기본적으로는 개발자가 직접 HttpURLConnection 객체를 생성할 수 없습니다.
보통 Url 객체의 openConnection() 함수로 인스턴스를 리턴받아와서 사용하고 setRequestMethod() 함수를 통해 request 형식을 변경할 수 있습니다.
HttpUrlConnection은 자바에서 기본적으로 제공하는 클래스이기 때문에 호환성 문제도 없고 가볍게 사용할 수 있다는 장점이 있습니다.
하지만 사용법이 복잡하고 간단한 API 하나를 부르는데도 보일러플레이트 코드가 굉장히 길어집니다.
또한, 비동기도 직접 구현해야 하는 단점이 존재합니다.
<!-- manifest에 인터넷 권한 설정 -->
<uses-permission android:name="android.permission.INTERNET" />
val url = URL("https://...")
val huc = url.openConnection() as HttpURLConnection
huc.requestMethod = "GET"
if (huc.responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader(InputStreamReader(huc.inputStream)).use { br ->
var data: String?
while (br.readLine().also { data = it } != null) {
println(data)
}
}
}
OkHttp
OkHttp는 REST API, HTTP 통신을 간편하게 구현할 수 있도록 Square에서 개발한 라이브러리입니다.
OkHttp는 Okio를 기반으로 만들어졌으며, Shared Memory Pool을 통해 기존 Java I/O 라이브러리보다 효율적인 입출력이 가능합니다.
그 밖에도 HTTP/2가 지원되지 않을 때를 대비한 Connection Pooling, 다운로드 사이즈를 줄이기 위한 Transparent GZIP, 반복되는 call을 효율적으로 처리하기 위한 Response Caching 등 유용한 기능들을 제공합니다.
또한, OkHttp는 동기, 비동기 방식을 모두 제공하여 개발자가 선택하여 처리할 수 있습니다.
<!-- manifest에 인터넷 권한 설정 -->
<uses-permission android:name="android.permission.INTERNET" />
// build.gradle에 OkHttp 라이브러리 의존성 추가
implementation "com.squareup.okhttp3:okhttp:4.10.0"
// OkHttpClient 객체 생성
var client = OkHttpClient()
// client가 요청할 request 생성
val request: Request = Request.Builder()
.url("http://...")
.build()
// 요청 실행
// 동기 처리 : execute()
// 비동기 처리 : enqueue()
client.newCall(request).enqueue()
// 요청 결과에 따른 작업을 위해 Callback 설정
client.newCall(request).enqueue(object : Callback {
// 통신 실패
override fun onFailure(call: Call, e: IOException) {
e.printStackTrace();
}
// 통신 성공
override fun onResponse(call: Call, response: Response) {
if (response.isSuccessful) {
// 응답 성공
} else {
// 응답 실패
}
}
})
'안드로이드 > 활용' 카테고리의 다른 글
[Android] Tikxml로 XML 파싱하기 (0) | 2023.08.20 |
---|---|
[Android] Retrofit 사용하기 (0) | 2023.08.18 |
[Android] Socket 통신 (0) | 2023.08.17 |
[Android] MediaPlayer와 MediaRecoder (0) | 2023.08.02 |
[Android] ViewPager2 사용하기 (0) | 2023.07.31 |