Android/Tech (53) 썸네일형 리스트형 [Jetpack Compose] 불필요한 Recomposition 을 줄여 앱 퍼포먼스 개선하기 동기 Jetpack Compose 를 활용하여 개발 중인 앱 에는 드래그 앤 드랍과 같은 유저 인터랙션이 존재합니다. 다만 문제가 좀 있었습니다. 드래그 앤 드랍 시 화면이 버벅거린다는 점이었고, 이는 매우 치명적인 문제였습니다. 이를 해결하기 위해 다양한 솔루션들을 시도해보았고, 끝내 효과적인 방법 두 가지를 알게 되었습니다. Jetpack Compose 로 UI 를 구현하였지만 앱의 퍼포먼스 저하를 경험하고 계신 분들께서는 지금부터 기술할 방법들을 적용해보시면 좋을 것 같습니다. 권장사항 권장사항 준수 | Jetpack Compose | Android Developers 권장사항 준수 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 발생할 수 있는 일반적인 Compose.. [Jetpack Compose] HiltViewModel() 을 통해 주입된 ViewModel 의 생애 알아보기 동기 현대적인 구조로 앱을 개발하다 보면, ViewModel 의 사용을 피할 수 없습니다. 다양한 요구 사항 및 유저 플로우에 의해 변경되거나 유실될 수 있는 UI 데이터를 안정적으로 유지하여야 하기 때문입니다. Android Jetpack Library 중 하나인 Hilt 는 Jetpack Compose 를 사용하는 환경에서 ViewModel 의 사용을 보다 간편하게 해주는 기능을 제공하고 있으며, 이 것이 바로 포스트의 주제인 hiltViewModel() 입니다. 오늘은 이에 대해 학습한 것을 정리하고자 합니다. hiltViewModel() hiltViewModel() 메서드에 작성된 주석은 다음과 같습니다. Returns an existing HiltViewModel -annotated ViewMo.. OkHttp3 Interceptor 를 통해 표준화된 응답의 에러 처리하기 동기 저는 보통 프로젝트 진행 시, 백엔드 개발자분께 '표준화된 형태로 성공 및 실패 응답을 반환해달라'고 요청하는 편입니다. 하나의 data class 를 통해 응답을 내려 받아 이에 대한 핸들링을 용이하게 하기 위해서입니다. 일관된 방식으로 요청의 성공 및 실패를 처리할 수 있으며, 더 나은 가독성을 가진 코드를 작성할 수 있게 되죠. 이번에 새롭게 진행하게 된 프로젝트 역시 마찬가지로, 백엔드 동료분께 같은 요청을 드렸습니다. 오늘은 표준화된 JSON 에서 에러를 파싱하기 위해 수행한 과정에 대해 기록하고자 합니다. 응답 표준화의 목적 응답을 표준화하는 이유는 간단합니다. 요청의 성공 또는 실패에 대한 처리를 간편화, 일관화할 수 있습니다. data class CTResponse( val code:.. ParentFragmentManager, ChildFragmentManager 동기 간만에 Android View 를 활용해 개발하고 있습니다. Jetpack Compose 를 통해 UI 를 구현한 시간이 길다보니, Fragment 에 대한 지식이 가물가물한 상태입니다. 특정 Fragment 에서 다른 Fragment 를 표시하려는 과정에서, parentFragmentManager 와 childFragmentManager 사이에서 고민하게 되었는데, 이 과정에서 알게 된 것을 간략하게 기록해보고자 합니다. FragmentManager 안드로이드 개발에서 Fragment 는 굉장히 자주 사용됩니다. UI 를 모듈화할 수 있는 것이 특징인데요. 이를 통해 여러 View 를 하나의 Fragment 로 구성하여, 또 하나의 거대한 View 처럼 활용할 수 있기도 합니다. Fragment .. Service 를 운용하는 환경에서 앱을 완전히 종료하기 동기 지난 여름에 개발했던 앱 의 리팩토링이 한창입니다. 음악 플레이어 앱 특성 상, 음악을 재생 중이라면 앱이 종료되어도(된 것처럼 보여도) 플레이어의 상태가 유지되어야 합니다. 이러한 스펙을 구현하는 과정 중 학습했던 것을 기록합니다. 완전한 종료 공식 문서, Processes and app lifecycle 의 일부입니다. 다양한 앱 구성 요소의 수명 주기에 대한 이해가 부족하면 중요한 작업 도중 앱 프로세스가 종료될 수 있다는 내용인데, 이는 곧, 다양한 앱 구성 요소의 수명 주기에 대한 이해가 부족하면 앱 프로세스를 종료하고 싶어도 종료하지 못할 수 있다는 것을 의미하기도 합니다. 앱을 완전히 종료해야 하는 이유는 간단합니다. 나도 모르게 무한한 작업이 프로세스 내에서 진행되고 있거나, 미처 해.. AsyncTask 는 왜 Deprecated 되었는가? 동기AsyncTask 가 Deprecated 되었다는 사실은 이미 대부분의 안드로이드 개발자들이 알고 있는 사실입니다. 물론 저도 그렇고요. 전 회사에서 개발자를 준비하고 있었을 때, 개발 부서 개발자 분들께 소스 코드를 보고 싶다고 말씀드려서 구경했던 프로젝트에서는 AsyncTask 와 HttpUrlConnection 을 통해서 데이터 통신-UI업데이트를 수행하고 있었습니다. 그 때 보았던 코드가 아직도 눈에 선하네요. AsyncTask 가 Deprecated 되었지만 여전히 채택되고 있었던(어쩌면 지금도 채택되고 있을 수 있는) 이유는, Kotlin 이 아닌 Java 로 프로덕트를 개발하고 있었기 때문입니다. 저는 Kotlin 을 학습하여 회사 밖에서 다양한 개인 프로젝트 및 협업을 수행하였기 때.. Ktor 적용기 (feat.Ktor Generics Response Handler) 동기 현재 진행 중인 네이버 부스트캠프 파이널 프로젝트를 처음 시작할 때에, 팀 동료들과 기술 스택에 대해 이야기를 나눴습니다. 사용할만 한 여러 스택들에 대해 의논하였고, 적절한 스택들이 채택되었습니다. 그렇게 개발을 별 일 없이 진행하던 중, API 가 하나 둘 씩 나올 때가 되어 이를 연동하기 위해 Retrofit 에 관한 이런 저런 셋팅을 준비하려 했습니다. 의존성을 추가하려던 순간, 문득 Retrofit 을 그냥 적용하는게 맞나? 라는 의문이 들었습니다. 결국엔 Ktor 를 적용하기로 결정했죠. 결정의 이유는 세 가지가 있었는데요. 늘 가던 길을 선택하고 싶지 않았던 것이 첫 번째 이유였습니다. 새로운 것을 배워보고 싶었거든요. 이 때 아니면 또 언제 해보겠어라는 생각이 들었습니다. 두 번째 이.. Third-Party-Library 없이 비디오 컷 편집 기능 구현하기 동기 네이버 부스트캠프의 꽃, 그룹 프로젝트를 개발하고 있습니다. 실력있는 동료들과 함께 비디오와 관련된 앱 서비스를 기획, 디자인, 개발하고 있는데요. 제가 낸 주제이기도 하고, 비디오와 관련된 작업을 경험하고 싶었기도 해서 굉장히 즐겁게 개발하고 있습니다. '앱 내에서 비디오 컷 편집을 할 수 있다면 편하지 않을까?' 라는 생각이 들었고, '라이브러리 없이 개발하면 분명 어렵겠지만, 그만큼 배우는 것도 많고 재미도 있지 않을까?' 라는 생각도 들었습니다. 그래서 스스로의 기술적 도전 과제로 설정하여 구현해보기로 마음 먹었습니다. 해당 포스트는 라이브러리 없이 직접 비디오 컷 편집을 개발하는 과정과, 그 과정 안에서 알게 된 것을 기반으로 작성됩니다. Jetpack Compose 에서 비디오 불러오기 .. 이전 1 2 3 4 5 ··· 7 다음