Android/Tech (53) 썸네일형 리스트형 BaseActivity 를 활용한 One-Stop-Architecture 구현하기 동기재직 중인 회사의 업무(SI, SM) 특성상 새로운 프로젝트 생성의 빈도가 굉장히 높습니다. 거의 한 달에 한 번 씩은 새로운 프로젝트를 생성하고, 해당 프로젝트의 아키텍처를 구성합니다. 현재는 들어오는 모든 Android 애플리케이션 개발을 제가 담당하고 있는데, 그렇다보니 하나의 앱을 처음부터 끝까지 혼자서 개발하는 경우가 대부분입니다. 다양한 문제를 홀로 해결해야 한다는 점은 가끔 부담스럽기도 하지만, 원하는 기술 스택을 마음껏 적용해가며 신나게 일할 수 있다는 장점이 되기도 합니다. MVI Architecture, Clean Architecture, Jetpack Compose 를 개인적으로 굉장히 좋아하는데, 이러한 코드를 여러 번 작성하다보니 그 과정에서 큰 피로를 느꼈습니다. 오늘은 이.. [Jetpack Compose] Stability Configuration File 은 어떻게 동작하는가 동기Jetpack Compose 를 활용한 개발 도중, StableMarker 를 잘 작성해왔음에도 불구하고 화면 렌더링 시의 Janky Frame 이 발생하는 것을 확인했습니다. Jetpack Compose 외부 라이브러리가 그 원인이었는데, 내부 데이터 클래스에 StableMarker 가 작성되어 있지 않았기 때문입니다. 이를 해결하기 위해 Stability Configuration File 을 정의 및 적용 하였고, 이에 대한 문제를 해결할 수 있었습니다. 동작 과정에 의문이 생겼고, 이에 대해 학습했습니다. [Jetpack Compose] 불필요한 Recomposition 을 줄여 앱 퍼포먼스 개선하기동기 Jetpack Compose 를 활용하여 개발 중인 앱 에는 드래그 앤 드랍과 같은 유저.. [Jetpack Compose] UI 테스트 작성하기 동기최근, 성장이 더딘 느낌을 받고 있습니다. 지식을 습득하고 쌓는 일은 소홀히 하지 않고 있지만, '내가 개발한 애플리케이션이 과연 훌륭한 애플리케이션인가' 라는 의문을 지울 수 없습니다.좋은 애플리케이션은 견고한 구조, 그 이상의 추상적인 의의가 필요하다고 생각합니다. 저는 그것이 '좋은 유지보수성' 과 '테스트 용이성' 이라고 생각합니다. 이를 위해서는 테스트 코드가 필수적이라고 할 수 있습니다. 유닛 테스트를 작성하는 것에는 업무를 통해 꽤나 익숙해졌지만, 여전히 UI 테스트에 대한 두려움이 남아 있었고, 이제는 이에 도전하여 한 걸음 더 성장하는 것이 필요한 시점이라고 느꼈습니다. 오늘은 사내에서 개발한 라이브러리가 적용된 샘플 애플리케이션을 개발하며 UI 테스트에 도전해보고, 이에 관한 내용을.. 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 는 현재 상태와 액션을 결합하여 새로운 애플리케이션의 상태를 반환하는 순수 함수를 일컫습니다. 즉, 함수형 프로그래밍이 가능한 언어에.. [Jetpack Compose] 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].. 이전 1 2 3 4 ··· 7 다음