본문 바로가기

Android

(72)
LazyList 과 RecyclerView 의 메커니즘 알아보기 동기'RecyclerView 와 LazyColumn 의 공통점과 차이점에 대해서 얘기해 주세요'현재 재직 중인 기업의 면접 질문이었습니다. 당시에는 '다량의 데이터 셋을 효율적으로 표현하기 위한 컴포넌트이며, Android View System 과 Jetpack Compose 각각 나름의 최적화가 이루어져있어 비교적 적은 리소스를 소모한다는 공통점이 있습니다. 차이점은 잘 모르겠습니다.' 라고 대답했던 기억이 있습니다.당시에 힌트를 주셨는데, 최적화 부분에 있어서 사소한 차이점이 있다고 하셨습니다. 결국 대답은 못했고요.입사한지 한 달 정도 지난 시점에서, 이 질문에 대한 답변을 생각해보게 되었습니다.RecyclerViewRecyclerView 는 Anndroid View System 기반의 UI 구현 ..
[Jetpack Compose] CompositionLocal 로 이벤트 처리하기 동기 Jetpack Compose 를 활용하여 UI 를 개발하다 보면, Composable 의 테스트 용이성과 재사용성을 높이기 위해 StateHoisting 을 적용하곤 합니다. 제 경우, StateHoisting 을 엄격하게 적용하려다 보니 수많은 람다 파라미터로 인해 Composable 메서드를 호출하는 부분이 과도하게 길어지고, 드릴링이 발생하는 문제가 있었습니다. 저는 이를 CompositionLocal 을 통해 해결하였고, 오늘은 이에 대해 간략하게 작성해보려 합니다. Stability 불필요한 Recomposition 의 발생을 최대한 줄이기 위해 이벤트 처리와 관련된 로직을 Stable 하게 만들어야 합니다. 이에 관한 내용은 아래에서 확인하실 수 있습니다. [Jetpack Compose]..
[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:..
[Jetpack Compose] Reorderable LazyList 에 Drag&Drop to Remove 곁들이기 동기 DND 8기를 통해 알게 된 좋은 분들과 여전히 함께 이런 저런 작업을 하고 있습니다. 동아리 활동 이후 새롭게 시작한 프로젝트의 UI 중, 다소 복잡하게 설계되어 있는 부분을 담당하게 되었고, 이를 해결 및 구현한 과정에 대해 기록하고자 합니다. 요구 사항은 무엇이었나? 1. + 버튼을 누르면 화면 상단에 재료를 입력할 수 있는 박스가 생성된다. 2. 해당 박스 내의 InputField 에 특정 값을 입력하고 Done 버튼을 누르면 화면 하단의 그리드에 재료가 추가된다. 3. 화면 하단 그리드의 항목은 길게 누른 뒤 드래그하여 순서를 변경할 수 있다. 이게 요구 사항의 전부였다면, 구현하는 데에 큰 어려움이 없었을 것입니다. 관련 기능을 제공하는 유명한 라이브러리가 있기 때문입니다. 하지만 곤란하..
ParentFragmentManager, ChildFragmentManager 동기 간만에 Android View 를 활용해 개발하고 있습니다. Jetpack Compose 를 통해 UI 를 구현한 시간이 길다보니, Fragment 에 대한 지식이 가물가물한 상태입니다. 특정 Fragment 에서 다른 Fragment 를 표시하려는 과정에서, parentFragmentManager 와 childFragmentManager 사이에서 고민하게 되었는데, 이 과정에서 알게 된 것을 간략하게 기록해보고자 합니다. FragmentManager 안드로이드 개발에서 Fragment 는 굉장히 자주 사용됩니다. UI 를 모듈화할 수 있는 것이 특징인데요. 이를 통해 여러 View 를 하나의 Fragment 로 구성하여, 또 하나의 거대한 View 처럼 활용할 수 있기도 합니다. Fragment ..
Composable 파라미터 주의 사항 (feat.Recomposition) 동기 저는 Jetpack Compose 와 MVI 조합을 굉장히 좋아합니다. UI 상태는 uiState 라는 이름의 data class 를 주로 사용하는 편인데, 문득 uiState 를 통째로 넘겨 화면을 업데이트하고 있는 코드에 의문이 생겼습니다. '불필요한 Recomposition 은 Jetpack Compose 가 줄여준다고는 하지만, 확실한걸까?' 라는 의문이 말입니다. 이에 대해 시험한 결과와 함께, Jetpack Compose 사용 시 Composable 의 파라미터 선정에 대한 주의 사항을 기록하고자 합니다. 문제의 코드 @Composable private fun BoxScope.ColorBox(state: UiState) { Box( modifier = Modifier .align(Alig..