배운지는 꽤 됐지만 다시 복습삼아 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
'Android' 카테고리의 다른 글
[Android] Kotlin Context 란 ? (0) | 2023.05.31 |
---|---|
[Android] 안드로이드 스튜디오 터미널 실행 안될 경우 (0) | 2023.05.29 |
[Android] Fragment 에서 뜬금없는 unresolved reference 에러 해결 (0) | 2023.05.29 |
[Android] Kotlin SharedPreferences 사용 (0) | 2023.05.29 |