전체 글 (95) 썸네일형 리스트형 UiEffect 를 위한 Channel<T> 사용법 동기저는 안드로이드 관련 지식을 Medium 에서 주로 얻곤 하는데요. MVI Architecture 적용 시 UiEffect 의 구현을 위해 SharedFlow 대신 Channel 을 사용하는 방식에 관한 컬럼을 보게 되었습니다. 사실, ViewModel 과 Screen-Level-Composable 은 1:1 대응 되는 경우가 많은데, 왜 굳이 SharedFlow 를 사용해야 하는지에 대한 의문이 항상 남아 있었습니다. 오늘은 해당 컬럼에서 얻은 지식에 관해 정리하고자 합니다. UiEffectMVI Architecture 를 안드로이드 프로젝트에 처음 적용하려고 하면 마주하는 문제가 있습니다. 바로 UiState 를 변경하지 않고, 애플리케이션에 특정한 액션을 취해주어야 하는 상황에 대한 처리인데요... 안드로이드의 MVI 와 Reducer 동기신규 프로젝트에 단독 투입되어 안드로이드 앱 개발을 수행하게 되었습니다. Jetpack Compose 와 MVI Architecture 로 앱을 구현했고, 이후 사수분께서 코드에 대한 설명을 요청하셨습니다. Screen-Level-Composable 에서 받은 UiEvent 를 ViewModel 로 전달하는 코드의 구현에 대한 설명을 드렸고, 참고 하시라고 Reducer 관련 컬럼을 몇 개 전달했는데, 저에게도 많은 도움이 되어 이에 대해 정리하고자 합니다. ReducerReducer 는 React 애플리케이션의 상태 관리 프로세스로 잘 알려져 있습니다. Reducer 는 현재 상태와 액션을 결합하여 새로운 애플리케이션의 상태를 반환하는 순수 함수를 일컫습니다. 즉, 함수형 프로그래밍이 가능한 언어에.. composed {} 와 Modifier.Node 로 Modifier Chain 최적화하기 동기Jetpack Compose 를 사용해서 UI 를 개발하다 보면, Modifier 의 확장 함수를 구현하여야 하는 경우가 더러 있습니다. 불필요하게 길어지는 Modifier Chaining 을 방지하기 위해서나, 자주 사용하게 되는 Modifier Chaining 을 함수화 하여 사용하기 위해서 입니다. 별도의 지식 없이 Modifier 확장 함수를 구현하면 IDE 에서 이런 저런 주의를 주며 자동 코드 편집을 지원해 주는데요. 별 생각 없이 기능을 이용하고 코드를 그대로 두기 보다, 자세히 학습하여 사용하는 편이 추후에 발생할 가능성이 있는 문제를 해결하는 데에 큰 도움이 되리라 생각하여 학습하게 되었습니다. Modifier 와 확장 함수Jetpack Compose 로 UI 를 구현할 때에 가장 중.. 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:.. 이전 1 2 3 4 ··· 12 다음