본문 바로가기

전체 글

(92)
Coroutines 파헤치기 동기 최근 꽤나 많은 Retrofit 통신 코드를 작성하게 되어, 자연스럽게 Coroutines 코드를 함께 작성하고 있습니다. 그 과정 중에 궁금했던 부분들이 많았습니다. 최근에 Flow 의 취소에 관련된 포스트와 Retrofit 의 통신 방법에 관한 포스트를 작성하면서 참고했던 레퍼런스에도 Coroutines 키워드를 심심찮게 만날 수 있었는데, 와중에도 궁금한 점들이 계속해서 생겨났습니다. 구조에 대해 깊게 알게 되면, 실제로 코드를 작성할 때에도 해당 기술의 어떠한 포인트에 유의하며 작성해야 하는지 알 수 있게 됩니다. 그러한 의미에서, Coroutines 에 대해 자세히 알아보고자 합니다. Kotlin Coroutines 사실, 이미 Coroutines 에 관한 여러 포스트를 작성했습니다. 아래..
[Retrofit] Call<T>.enqueue() 와 suspendable 메서드 호출 방식의 차이 Retrofit 안드로이드의 네트워크 통신은 Retrofit 등장 이전과 이후로 나뉜다고 해도 과언이 아니라고 생각합니다. 그만큼 Retrofit 은 안드로이드 프로그래밍 생태계에 지대한 영향을 미쳤습니다. Retrofit 을 사용하는 방법은 크게 두 가지로 나뉠 텐데요. 첫 번째는 Retrofit 이 제공하는 Callback 클래스를 이용하는 방법이고, 두 번째는 Kotlin Coroutines 와 함께 사용하는 방법이 되겠습니다. 저는 Coroutines 에 익숙해지고 나서부터 보통 두 번째 방법을 이용해왔습니다. 그 전에는 (Java 로 개발 공부하던 시절) 당연히 첫 번째 방법을 이용했고요. HttpUrlConnection 과 AsyncTask 도 활용해보고 그랬었는데, 확실히 Retrofit 을..
RecyclerView 의 업데이트와 DiffUtil 갑자기 RecyclerView? DiffUtil? Jetpack Compose 를 꽤 오래 사용했지만, 현재 참여중인 네이버 부스트캠프 멤버십 과정에서의 UI 관련 요구 사항들은 대부분 View 를 기반으로 주어지는 상황이라 최근에는 xml 코드를 많이 작성하고 있습니다. View 를 기반으로 안드로이드 UI 를 구현하다보면, RecyclerView 를 정말 많이 사용하게 되고, 그에 따라 RecyclerView Adapter 역시 여러 번 구현하게 됩니다. Jetpack Compose 를 오래 전부터 사용하다보니 Adapter 를 어떻게 구현하는지 기억이 안 나서 당황스러웠던 기억도 있네요. RecyclerView Adapter 는 보통 RecyclerView.Adapter 로 구현하게 되는데, 목록에..
Flow Cancellation (feat. Exception Handling) Flow Flow 는 순차적으로 값을 보내고 성공 또는 예외와 함께 완료되는 비동기 데이터 스트림입니다. Flow 에 대해서는 이전에 포스팅한 글이 있으니, Flow 에 대한 이해가 부족하시다면 다음 글을 참고해주세요. Flow 제대로 알기 안드로이드 개발을 진지하게 하고 계시다면, 앱 아키텍처에 대해 잘 알고 계시리라 생각합니다. 특히 MVVM 의 개념적 설명에 대해서는 정말 여기 저기서 많이 보셨을 겁니다. 저는 처음 MVVM 을 데 blothhundr.tistory.com Flow 는 데이터를 방출, 가공, 수집할 수 있도록 합니다. 수집은 필히 CoroutineScope 내에서 이루어져야 하는데, 이는 Flow 가 비동기 데이터를 처리하기 위해 설계 및 구현되었기 때문입니다. '방출한 데이터를 가..
Android ViewModel 의 onCleared() 는 언제 호출되는가? ViewModel ViewModel 은 이제는 안드로이드 프로그래밍에 있어서 필수 불가결한 존재가 되었습니다. 특히 MVVM, MVI, MVW 등, 관심사의 철저한 분리가 요구되는 아키텍처에는 꼭 필요합니다. 특정 아키텍처를 적용하지 않더라도, View 가 표시할 상태나 데이터를 위해 ViewModel 이 필요하기도 하고요. Rx라이브러리를 이용하거나 ViewModel 내에서 특정 리소스를 Observing 하는 경우에는 메모리 릭에 대한 리스크를 관리하기 위해 ViewModel 의 onCleared() 에서 관련 작업 또는 리소스들을 해제해주어야 합니다. 이는 다소 제네럴한 지식이고요. 문득, onCleared() 가 언제, 또 어떻게 호출되는지 궁금해졌습니다. 내부 동작 방식 ViewModel 의 o..
@Retention 은 어떻게 동작하는가? 동기 DND 8기에 참여하여 프로젝트를 진행했을 때, 팀 동료분께서 먼저 앱 구조를 구축해주셨습니다. 그 때 궁금했던 것이 @Retention Annotation 입니다. CoroutineDispatcher 여러에 대해 서로 다른 Annotation 을 붙여주셔서, 어떤 기준으로 결정하신 건지 여쭤봤었는데 속 시원한 답변을 구하지 못했던 기억이 납니다. 문득 궁금해져, 이번 기회에 이에 관해 학습하고 정리하려 합니다. Hilt 사용 시 사용되는 Annotation 에 관해서는 이미 정리해 둔 포스팅이 있습니다. 심지어 이번 포스팅에서 다룰 @Retention 에 관해서도 간략하게 작성했습니다. [Dagger-Hilt] Dagger-Hilt 의 대표적인 Annotations Dependency Inject..
Kapt, 그리고 KSP GDG Korea 슬랙 채널에서 Dagger 가 KSP 를 지원한다는 소식을 보았고, Kapt 와 KSP 에 대해 제대로 알아보고 정리하고 싶어 포스팅합니다. Kapt Kapt(Kotlin Annotation Processing Tool) 은 어노테이션 프로세싱을 지원하기 위한 Kotlin Compiler Plugin 이며, Java 의 apt(Annotation Processing Tool) 과 유사한 기능을 제공합니다. Kotlin 1.0.5 까지는 Annotation Processing 을 위해 apt 를 사용하였으나, Kotlin 이 널리 사용되기 시작하면서 그다음 버전인 Kotlin 1.0.6 부터는 Kapt 가 제공되었습니다. 특징 호환성 Kapt 는 apt 와 호환 가능합니다. 그러므로, 큰..
DND 9기 운영진 활동 회고 마무리된 DND 9기 활동 DND 8기에 안드로이드 개발자 포지션으로 참여하여 팀원들과 프로덕트를 개발하였고, 그 과정의 경험과 과정 중 만났던 모든 이들이 너무나 좋았어서, 뭔가에 홀린 듯 운영진 지원을 하고 발탁되어 이번 9기에는 운영진으로 활동할 수 있었습니다. 좋았던 점 사람 만나는 걸 좋아하는 편이라, 다양한 사람들과 교류하는 것이 굉장히 즐거웠습니다. 처음 보는 분들, 안면이 있었던 분들 모두 너무나 반가웠어요. 이러한 동아리 특성 상 굉장히 훌륭한 커리어를 쌓아오신 분들이 많기 마련인데, 그런 분들과 허심탄회한 얘기도 나눌 수 있어 더욱 좋았습니다. 스스로도 성장할 수 있는 시간이었습니다. 담당하게 된 조가 개발해 나갈 프로덕트에 대해 함께 얘기하고 의견을 나누면서, 프로덕트 개발 시 어떤 ..