[kotlin] Jetpack Compose에서 백엔드와의 통신 처리하기
Jetpack Compose는 안드로이드 앱의 사용자 인터페이스를 구축하기 위한 새로운 방법을 제공합니다. 이 기술은 백엔드와의 통신을 처리하는 데 있어 어떻게 사용될 수 있을까요?
1. Retrofit을 사용한 네트워크 통신 설정
안드로이드 앱에서 백엔드와의 통신을 처리하기 위해 Retrofit을 사용하는 것이 일반적입니다. Retrofit은 RESTful API 호출을 쉽고 간편하게 처리할 수 있는 라이브러리입니다.
implementation("com.squareup.retrofit2:retrofit:2.9.0")
implementation("com.squareup.retrofit2:converter-gson:2.9.0")
위와 같이 Retrofit 의존성을 추가한 후, 네트워크 통신을 위한 API 인터페이스를 정의합니다.
interface ApiService {
@GET("users/{user}/repos")
suspend fun listRepos(@Path("user") user: String): List<Repo>
}
그리고 다음과 같이 Retrofit 객체를 생성하여 사용합니다.
val retrofit = Retrofit.Builder()
.baseUrl("https://api.github.com/")
.addConverterFactory(GsonConverterFactory.create())
.build()
val apiService = retrofit.create(ApiService::class.java)
try {
val repos = apiService.listRepos("octocat")
// 가져온 데이터를 Composable 함수 내에서 처리
} catch (e: Exception) {
// 오류 처리
}
2. 상태를 관리하는 ViewModel 사용
Jetpack Compose 앱에서는 상태 관리를 위해 ViewModel을 사용할 수 있습니다. 네트워크 통신으로 받은 데이터를 ViewModel 내에서 관리하고, 이를 UI에 표시하는 데 사용할 수 있습니다.
class MyViewModel: ViewModel() {
private val _repoList = mutableStateOf<List<Repo>>(emptyList())
val repoList: State<List<Repo>> = _repoList
// 네트워크 통신 및 데이터 갱신
suspend fun fetchRepoList() {
try {
val repos = apiService.listRepos("octocat")
_repoList.value = repos
} catch (e: Exception) {
// 오류 처리
}
}
}
3. Composable 함수에서 데이터 표시
마지막으로, 받아온 데이터를 Composable 함수를 사용하여 UI에 표시합니다.
@Composable
fun RepoListScreen(viewModel: MyViewModel) {
val repoList by viewModel.repoList.collectAsState()
// 데이터를 리스트로 표시
}
이제 Jetpack Compose 앱에서 백엔드와의 통신을 처리하기 위한 기본적인 구성을 완료했습니다.
결론
Jetpack Compose를 사용하여 안드로이드 앱을 개발할 때, Retrofit과 ViewModel을 통해 간단하고 효율적으로 백엔드와의 통신을 처리할 수 있습니다. 제공된 예시 코드를 통해 실제 앱에 적용해 보세요!
참고자료: