본 포스팅은 FastCampus - 30개 프로젝트로 배우는 Android 앱 개발 with Kotlin 초격차 패키지 를 바탕으로 학습된 내용을 요약 및 정리한 글입니다.
Retrofit
1. Retrofit 이란?
Retrofit 이란 간단하게 말하면 서버와 클라이언트 간 HTTP 통신을 할 수 있도록 도와주는 녀석이다.
우리들이 흔히 어플을 만들때 오픈API을 이용하여 데이터 정보를 가져오게 되는데 그때 Retrofit을 이용하면 편하게 코드를 작성할 수 있다.
물론 Retrofit을 사용하지 않더라도 HttpClient, Volley, OKhttp 등 통신을 편하게 할 수 있도록 도와주는 라이브러리 들이 존재 했었지만 요즘은 전부 Retrofit을 이용하는 추세이므로, HTTP 통신을 할때는 이제는 Retrofit을 이용하도록 하자.
2. Retrofit 을 사용하면?
빠른 성능 - OkHttp 의 3배이상의 차이가 존재
가독성 - Annotation 사용으로 코드의 가독성이 뛰어남
간단한 구현 - 반복된 작업을 라이브러리로 넘겨서 작업
동기/비동기 쉬운 구현 - 비동기는 응답이 도착하면 Callback으로 받고 메인스레드에서 작업을 처리
3. Retrofit의 구성요소
DTO - "Data Transfer Object" 형태의 Model이며 JSON 타입 변환에 사용됨Interface - 사용할 HTTOP CRUD 동작들을 정의해놓은 인터페이스 이다.Retrofit.Builder 클래스 - Interface를 사용할 인스턴스, baseUrl(URL) / Converter(변환기)를 설정
위 구성요소들의 예제는 밑에서 확인하자!
4. Retrofit 사용하기
작성한 파일 목록
1. AnroidManifest.xml
2. BookService.kt
3. Book.kt
4. SearchBooksDto.kt
5. MainActivity.kt
6. build.gradle
AnroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
항상 HTTP 통신을 할때는 네트워크 접근 허락을 해주어야 한다.
build.gradle
dependencies {
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
}
BookService.kt
interface BookService {
@GET("/v1/search/book_json")
fun getBookByName(
@Header("X-Naver-Client-Id") id: String,
@Header("X-Naver-Client-Secret") secretKey: String,
@Query("query") keyword: String
): Call<SearchBooksDto>
}
Book.kt
data class Book(
@SerializedName("isbn") val id: String,
@SerializedName("title") val title: String,
@SerializedName("description") val description: String
)
SearchBooksDto.kt
data class SearchBooksDto (
@SerializedName("items") val books: List<Book>
)
MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//retrofit 구현체가 생성이 되서 retrofit이라는 변수에 할당이 된다.
val retrofit = Retrofit.Builder()
.baseUrl("https://openapi.naver.com")
.addConverterFactory(GsonConverterFactory.create())
.build()
val bookService = retrofit.create(BookService::class.java)
bookService.getBookByName("GBs1ecx1hmePfrG29pdo","9JQH1LYFYQ","안드로이드")
.enqueue(object : Callback<SearchBooksDto>{
override fun onResponse(
call: Call<SearchBooksDto>,
response: Response<SearchBooksDto>
) {
if(response.isSuccessful.not()){
return
}
response.body()?.books?.forEach{
Log.d(TAG, it.toString())
}
}
override fun onFailure(call: Call<SearchBooksDto>, t: Throwable) {
TODO("Not yet implemented")
}
})
}
companion object{
private const val TAG = "MainActivity"
}
}
해당된 예제는 네이버 오픈API 책검색 API를 가져와서 작성하였고 HTTP 통신이 되는지만 확인한 예제이기 때문에 로그를 찍어서 데이터가 잘 넘어오는지 확인하였습니다.
이처럼 데이터가 잘 넘어 오는것을 확인하였습니다.
이처럼 Retrofit을 사용하기 위해서는 postman을 이용하면 편리한대, 차후 postman을 사용하는 방법에 대해서도 포스팅하겠습니다.
'안드로이드(Kotlin)' 카테고리의 다른 글
Kotlin 코틀린의 싱글톤(Singleton) (0) | 2022.08.30 |
---|---|
Kotlin 코틀린의 object와 class 키워드 (0) | 2022.08.30 |
Kotlin 코틀린의 RecyclerView (0) | 2022.08.25 |
Kotlin 코틀린의 SharedPreferences (0) | 2022.08.08 |
Kotlin 코틀린의 Context (0) | 2022.08.08 |