본문 바로가기
반응형

전체글974

컴포즈 상태 단위는 어떻게 묶으시나요? 상태를 어떤 단위로 묶어서 사용하시나요? 1.하나의 화면별로 uiState를 관리하고 계신가요? 2.아니면 기능별로 state를 관리하고 계신가요? 전자로 우선적으로 구현해도 상관없지만,불필요한 리컴포지션이나 사이드이펙트를 방지하기 위해서는 상태를 적절히 구분하는 것이 필요하겠습니다. 이번 글에서는 이에 대한 상황을 예시로 살펴보겠습니다. 필요에 따라어디서는 화면별로, 어디서는 기능별로 분리하는 상황들을 마주할 수 있습니다. 화면별로 분리하면 코드 유지보수가 쉽고기능별로 분리하면 사이드이펙이나 리컴포지션을 줄일 수 있습니다. 이번에 제가 가져온 예시로는, 불필요한 리컴포지션을 발견하고화면별 -> 기능별로 마이그레이션하는 경험을 공유해드리고자 합니다. 만약에 화면별로 분리하여 하나의 uiState로.. 2025. 9. 4.
리컴포지션에 대한 오해들, 그리고 "도넛-홀-스키핑" 최근 Compose 코드를 다루다가, 인자의 변화가 없는데 스마트 리컴포지션이 되지 않는 상황을 마주했습니다.컴포즈의 "도넛 홀 스키핑" 이라는 개념을 처음 들으신다면, 그리고 리컴포지션 범위에 대해 헷갈리신다면 이 글을 읽으시길 추천드립니다. 리컴포지션과 스마트 리컴포지션 조건은 생각보다 다양하고 복잡해서 하나의 포스팅에 담기에 매우 어려운 것 같습니다.글의 내용이 복잡하더라도, 최대한 정리하고자 하니 잘 봐주시면 감사드리겠습니다. 우선 "리컴포지션" 에 대해 정의하겠습니다. Recomposition 범위의 기본은변화를 감지한 캡쳐값을 사용하는 가장 작은 스코프를 후보군으로 살펴본다는 점입니다. Smart Recomposition은리컴포지션 후보군 대상이 되었을 때, 건너뛸 수 있다면(인자의 변화.. 2025. 8. 24.
코루틴 취소에 대한 오해 며칠 전, 지인으로부터 코루틴 취소에 대한 질문을 받았습니다. "cancel()을 호출했는데, 왜 취소가 안되지?" 직감적으로, 코루틴 취소 동작에 대한 이해의 오해가 있음을 알 수 있었고제가 공부했던 분야였던 덕분에 도움을 줄 수 있었습니다. 코루틴 취소코루틴 취소(cancel, cancelAndJoin 등)는 사실 요청과 동시에 동작하지 않고, 중단 가능한 함수(suspend)를 만났을 때 동작합니다.다른 말로, 중단 가능한 지점을 만나지 않는다면 코루틴 취소 요청이 들어와도 인식하지 못하고 작업을 쭉 진행합니다.아래 예시가 대표적인 예시입니다.fun main() = runBlocking { val heavyJob = this.launch { // 대충 엄청 무거운 동작이라는 뜻 .. 2025. 8. 11.
안드로이드 플랫폼 구조를 알고 계신가요? ⛑ Linux 커널우리가 사용하는 Android의 운영체제를 구동하는건 리눅스 커널 기반이다Android Runtime이 스레딩, 하드웨어 제어, 시스템 리소스 관리와 같은 기본 기능을 Linux 커널을 이용사용자나 개발자가 이 계층을 다룰 일 X이곳에서 동작하는 Binder IPC 라는 녀석이 있다.프로세스 간 통신을 위한 메커니즘서비스와 콘텐트 프로바이더는 Binder IPC를 통해 다른 프로세스에 접근프로세스 통신할 때 마다 커널로 들어간다startActivity도 system_server 프로세스가 액티비티를 찾고, system_server 와 어플리케이션 프로세스가 통신할 때 커널모드로 들어간다.액티비티를 여는데 매번 커널모드?→ startActivity()를 호출하면 앱 프로세스는 system.. 2025. 5. 18.
반응형