본문 바로가기

Kotlin_study

(20)
[HiStory 리팩토링] LiveData에서 Flow로 전환 HiStory 어플 리팩토링 과정에서 현재 서버 연동이 불가능한 상황이라 Room을 사용하여 데이터를 관리하려고 한다. 이 과정에서 Flow와 LiveData를 사용하게 되었는데, 둘 사이의 차이점에 대해 정리해보고자 한다. Flow는 비동기 작업에서 값을 생성 할 때 한번에 모든 값을 받는 것이 아니라, 한번에 하나씩 받는다. LiveData는 옵저버 패턴을 활용하여 구현되어서, 데이터가 변경될 때마다 알림을 받을 수 있고, 수명 주기를 인식하여 자동으로 관찰을 시작하거나 중단하기 때문에 UI에서 사용하거나 표시되는 데이터에 사용하기 적절하다. 그래서 Room DB에서 Flow형태로 값을 가져온 다음 ViewModel에서 이를 LiveData 형태로 변환한다면 데이터베이스의 데이터에 변경 사항이 있을 ..
[Kotlin] RecyclerView와 ViewModel 적용해보기 ViewModel을 학습한 내용을 이를 이전에 만들었던 FLO 어플에 적용하면서 이에 대해 제대로 학습하고, HiStory 어플에 적용하려고 한다. 그래서 이번에는 RecyclerView와 ViewModel에 대해 학습하여 이를 적용해보았다. //HomeFragment.kt val albumRecyclerViewAdapter = AlbumRVAdapter(homeViewModel.albumList) binding.homeTodayRecyclerView.adapter = albumRecyclerViewAdapter albumRecyclerViewAdapter.setMyItemClickListener(object : AlbumRVAdapter.MyItemClickListener{ override fun on..
[Codelab] Hilt와 DI에 대해 이해하기 목차 1. 공부 이유 2. Hilt의 사용법 3. 후기, 이후 계획 4. 참고문헌 1. 공부 이유 지난 학기 객체지향 프로그래밍 수업에서 의존성 주입(DI)에 대해 배웠다. 이에 대해 이해한 내용을 정리해보면, 객체들이 각각의 일을 수행하다보면 객체들 사이에 의존성이 생기게 된다. 의존성이 생긴다는 것은 한 클래스가 변화했을 때, 이와 의존관계가 있는 클래스에도 변경 사항이 생긴다는 것을 의미한다. 그렇게 된다면 변경 사항에 대응하기 위해 드는 시간이나 불편함이 생길 것이고 이를 의존성 주입으로 해결할 수 있는 것이다. 그래서 나는 의존성 주입을 객체가 하던 일을 대신해주는 무언가를 만들어서 객체가 이를 신경쓰지 않아도 되게 하는 것으로 이해했다. Codelab을 통해 학습하거나 예제 코드들을 보다보면 ..
[Codelab] Coroutine에 대해 이해하기 2(with LiveData, Flow) 목차 1. 공부 이유 2. Coroutine이란? 3. LiveData와 코루틴 사용 4. Flow와 코루틴 사용 5. 후기, 이후 계획 6. 참고문헌 1. 공부 이유 이전 게시글에 이어서 안드로이드에서 코루틴을 활용하는 방법에 대해 더 깊게 이해하고자 한다. 2. Coroutine 이란? 메인 스레드를 blocking 하면 안되기 때문에 백그라운드 스레드에서 네트워크, DB 작업을 진행해야 하는 것으로 알고 있었다. 그러다보니 처음 안드로이드를 배울 때 했던 FLO 클론코딩에서는 코루틴을 사용하지 않고 했는데, 그렇다면 문제가 생겼어야 했던 것이 아닌가? 라는 생각이 들었다. Room은 dao에서 suspend function을 사용하고 Retrofit은 자동으로 suspend function을 만듦으..
[Codelab] Coroutine에 대해 이해하기 목차 1. 공부 이유 2. Coroutine이란? 3. 후기, 이후 계획 4. 참고문헌 1. 공부 이유 ViewModel 학습 이후 ViewModel 팩토리 패턴, Repository 패턴 등 공부를 연결해서 해 나가려고 하다보니 Flow와 코루틴에 대한 선행 지식이 있으면 학습에 용이하다고 codelab에 적혀 있어 이를 먼저 공부하고자 한다. 코루틴은 이전부터 학습해야 한다고 느꼈는데, 아무래도 비동기 처리를 하지 않다보니 어플에서 끊기는 현상이 있고 심각할 경우 ANR로 인해 원하는 기능을 구현하지 못하는 경우가 생겼기 때문이다. 우선 학습한 내용을 한 글에 다 담아내기에는 양이 방대하다고 느껴 이를 나누어서 작성해보고자 한다. 참고 Codelab 링크 Use Kotlin Coroutines in ..
[Codelab] LiveData에 대해 이해하기(+ DataBinding) 목차 1. 공부 이유 2. LiveData란? 3. DataBinding이란? 4. 후기, 이후 계획 5. 참고문헌 1. 공부 이유 ViewModel에 대해 학습하며 LiveData에 대해 학습할 필요성을 느껴서 학습하게 되었다. ViewModel만으로는 데이터 변경사항을 감지하고 이를 UI에 반영하는게 아니고 UI Controller에서 데이터 조작에 관한 책임을 분리하는 수단이었기 때문이다. 그 과정에서 DataBinding의 개념도 같이 등장하여 이도 함께 학습하는 시간을 가졌다. 참고 Codelab 링크 Use LiveData with ViewModel (android.com) 2. LiveData 란? LiveData는 데이터를 보유하며, 수명 주기를 인식하는, 관찰 가능한 클래스이다. 1) 데..
[Codelab] ViewModel에 대해 이해하기 목차 1. 공부 이유 2. ViewModel이란? 3. View와 ViewModel의 역할 4. 후기, 이후 계획 5. 참고문헌 1. 공부 이유 리팩토링하는 과정에서 ViewModel을 적용하려다보니 어느 부분에서 적용하고, 어떻게 적용할지에 대한 고민이 들었다. 이 과정에서 내가 ViewModel을 제대로 이해하지 못하고 있다는 생각이 들었고, 적용 이전에 이에 대해 더 공부해보는 시간을 가질 필요를 느껴 Codelab에서 관련 내용에 대한 글을 읽고 공부하는 시간을 가졌다. 참고 Codelab 링크 Store data in ViewModel (android.com) 2. ViewModel 이란? ViewModel은 데이터를 저장하는 안드로이드 아키텍처 구성요소 중 하나로 ViewModel에서 관리하는..
[HiStory 리팩토링] 3. 카카오 로그인 기능 적용(2) 목차 1. 토큰 발급 2. 토큰 삭제 3. 이후 계획 4. 참고문헌 이어서 카카오 로그인을 한 후, 발급받은 토큰을 통해 화면을 갱신하도록 했다. 이전 포스팅에서 livedata를 사용한다고 했지만, 카카오 SDK를 활용하면 더 쉽게 구현할 수 있어서 이를 통해 구현했다. 1. 토큰 발급 //LoginActivity.kt binding.loginKakaoIb.setOnClickListener { val callback: (OAuthToken?, Throwable?) -> Unit = { token, error -> if (error != null) { } else if (token != null) { exitLogin() } } if (UserApiClient.instance.isKakaoTalkLogi..