본문 바로가기

전체 글

(95)
뮤런 - 당신의 러닝 메이트 GitHub - jangjh123/murun-android Contribute to jangjh123/murun-android development by creating an account on GitHub. github.com 앱 은 러너들을 위한 앱입니다! 러너의 케이던스를 측정하거나, 직접 설정한 케이던스에 맞는 BPM 의 NCS(No Copyright Sound) 를 재생합니다. ExoPlayer 를 사용하였기 때문에 Notification 으로도 플레이어를 제어할 수 있습니다. 🛒 Download 뮤런 - 당신의 러닝 뮤직 - Google Play 앱 러닝 케이던스에 맞는 음악을 재생해주는 앱입니다. play.google.com 📷 ScreenShots 💻 Language 100% Kotlin ..
Effective Kotlin, 좋았던 부분들. 동기 요 며칠 간 마르친 모스칼라의 저서 을 집중적으로 읽었습니다. 언어에 대한 이해도를 높이고 싶었기 때문입니다. 언어에 대한 이해도가 높아지면 보다 가독성이 높고 간결한 코드를 작성할 수 있게 되니까요. 물론 정리를 하지 않은 것은 아닙니다. 책을 읽으면서 옵시디언에 별도로 정리를 해뒀는데, 사실 다시 보게 되지는 않더라고요. 그래서 이번 기회에, 정말 중요하다 싶었던 내용들에 대해서 다시 한 번 정리하기 위해 포스팅합니다. 어떤 책이었나? 개인적으로는 좋은 내용들이 굉장히 많았습니다. '이런 것도 된다고?' 싶을 정도로 신기한 부분도 있었고, 평소에 꽤 당연하게 여기는 부분들에도 깊은 수준의 이해를 위한 설명이 포함되어 있기도 했습니다. 다만, 코틀린을 처음 접하는 이들에게 추천할만한 서적은 아닌 ..
Activity Lifecycle 의 각 콜백 메서드에서는 어떤 처리를 하는가? 동기 최근 면접 준비를 위해 안드로이드 지식에 대해 다시금 탐구하고 있습니다. 가장 최초로 탐구하려고 했던 주제는 Activity Lifecycle 입니다. 물론 어떠한 순서로 호출이 되고, 특정한 상황에는 또 어떻게 호출되는지에 대해서도 알고 있지만, 호출 되는 시점에 어떠한 일이 발생하는지, 화면은 언제 보여지고 또 언제 숨겨지는지, 숨겨지는 것과 별개로 또 언제 제거되는지 등에 대해서는 잘 모르고 있어 학습하고 포스팅하게 되었습니다. 상속 구조 Activity 는 기본적으로 위와 같은 구조를 지닙니다. 이후 AppCompatActivity 의 하위 타입인지, 아니면 ComponentActivity 의 하위 타입인지에 따라 다르긴 합니다만, 일단 Activity 부터는 기본적으로 같습니다. 그럼, 차..
LayoutInflater 가 xml 을 객체화 하는 과정 동기 네이버 부스트캠프 멤버십 과정에 참여 중인데, xml 기반으로 UI 를 작성하라는 요구 사항이 있어 오래간만에 xml 관련 코드를 잔뜩 작성하고 있습니다. 다만, 최근에 Jetpack Compose 에서의 렌더링에 대해 공부하고 있다 보니, xml 은 어떻게 UI 가 될까? 라는 궁금증이 생겼고, 이를 해결하기 위해 LayoutInflater 를 찾아가보기로 했습니다. LayoutInflater Layout 은 알겠는데, Inflate 라는 단어는 다소 생소해서 찾아봤는데, Inflate 는 '부풀리다'를 의미합니다. xml 에 작성된 코드를 바탕으로 UI 를 그려내니, 부풀리다는 의미가 썩 어울리는 것 같습니다. LayoutInflater 에 작성된 주석에는 해당 클래스의 역할과 생성 등에 관해 ..
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 가 비동기 데이터를 처리하기 위해 설계 및 구현되었기 때문입니다. '방출한 데이터를 가..