본문 바로가기
반응형
컴포즈 상태 단위는 어떻게 묶으시나요? 상태를 어떤 단위로 묶어서 사용하시나요? 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.
[Android] SW Bitmap과 HW Bitmap / 하드웨어 비트맵 알아보기 - 2 이번 글에서는 CPU / GPU에 따른 비트맵 렌더링 방식과 SW / HW Bitmap, 그리고 hardwareAccelerated 옵션과의 연관성까지 함께 정리해보도록 하겠습니다. 기존의 비트맵 렌더링Android 11 전까지는 GPU의 개입이 없었습니다.따라서 CPU와 RAM이 비트맵 관리부터 픽셀을 찍어 렌더링하는 작업까지 모두 담당했습니다. hardwareAcceleratedGPU가 등장하면서, Android 11 부터 비트맵을 렌더링하는데 GPU의 개입이 가능해졌습니다.hardwareAcceleated = true 라는 것은, "GPU를 활용하겠다" 라는 말과 동일합니다. Android 3.0(API 수준 11)부터는 하드웨어 가속 OpenGL 렌더기를 애플리케이션에 사용할 수 있으며 이를 통해.. 2025. 5. 5.
[Android] AI에는 왜 GPU를 쓸까? / 하드웨어 비트맵 알아보기 - 1 CPU와 GPUCPU와 GPU는 둘 다 데이터를 읽어들여 연산처리하는 기능을 수행하지만, 이름과 구조에서 알수 있듯이중앙 처리 장치(CPU)와 그래픽 처리 장치(GPU)는 역할이 매우 다릅니다. CPU- 직렬 명령 처리에 특화되어 있습니다.이는 한 번에 한 가지의 명령어만 처리한다는 것을 의미하고, 따라서 연산을 담당하는 ALU의 개수가 많을 필요가 없습니다.예를 들어, Octa-core CPU의 경우 코어 당 1개씩 총 8개의 ALU가 탑재되어 있는 제품입니다. - 낮은 대기 시간그림처럼 CPU 내부의 절반 이상은 캐시 메모리로 채워져 있습니다. 그만큼 응답 속도를 높일 수 있습니다.CPU는 GPU에 비해 GHz가 높습니다. Hz란 1초에 몇번 틱 하냐인데, 이것이 높을 수록 응답 속도가 높을 수.. 2025. 5. 5.
[당신이 잠든 사이에] 포그라운드 서비스와 백그라운드 서비스의 변천사 (Service, IntentService, JobIntentService, WorkManager, AlarmManager) '당신이 잠든 사이에' 앱을 2017년부터 개발하여 유지하면서, 'Service' 에 대한 정책적인 변화를 겪어왔습니다.이번 글에서는 'Service' 의 개념과 종류, 그리고 정책이 변화되면서 무엇이 없어졌고 생겼는지에 대한 변천사도 간단히 정리해보려 합니다.  글을 읽기 전에,AlarmManager의 다양한 함수들(set, setExact, setExactAndWhileIdle, setAlarmClock)와Doze/App Standby/Idle/배터리 최적화 제외 등의 개념을 작성해 놓은 글이 있어서, 먼저 참고하시면 좋을 것 같습니다https://hevton.tistory.com/899 [AlarmManager] - Doze, App StandBy, 배터리 최적화, Idle 상태에 대해Doze 모드.. 2025. 3. 31.
Paging3 적절히 판단해서 사용하기 채팅 로그 서비스 개발에 사용했던 Paging3에 대한 경험을 기록합니다. Room 기반으로 채팅 데이터를 기록하고, 이 데이터를 Paging3 를 활용하여 보여줍니다.하지만 원하는 요구사항에 항상 Paging3가 맞아 떨어지진 않았습니다.Paging3를 사용할지 직접 구현할지를 결정하고, 그 경험을 기록합니다. 1. Gallery 뷰에 Paging3 활용 사례우선, Paging3를 활용했던 경우에 대해서 먼저 이야기하겠습니다. Gallery 뷰의 진입점은 채팅방 -> 갤러리로 이뤄지고 있습니다.휴대폰의 기본 갤러리 앱 처럼, N x 3의 그리드 형식으로 사진들을 보여줘야 하고날짜에 따라 날짜 헤더 구분자 또한 필요합니다. 우선 이 요구사항들을 기반으로, Paging3를 구현하게 된다면 두 가지 방법이 .. 2025. 3. 17.
Firebase Cloud Functions V2 정복 (요금제 업그레이드 필요) Firebase Cloud Functions를 V1에서 V2로 마이그레이션하고,Cli를 이용해서 테스트하고 배포까지 진행하는 과정을 기록했습니다. 2023년에 Firebase Cloud Functions V1에 대한 글을 작성했는데,해당 글을 수정하여 V2 버전에 대한 내용으로 다시 채우게 되었습니다. V1버전에 대한 지원이 중단될 예정이므로, V2 버전으로 마이그레이션 바랍니다.V2버전에 대한 마이그레이션 방법은 공식 문서를 참고하거나, 이 글을 통해 진행하실 수 있습니다.  Firebase에도 AWS의 서버리스 프레임워크 AWS Lambda 처럼, 서버리스를 지원합니다.그 서비스 이름은 바로 'Cloud Functions' 입니다.  도입 배경저같은 경우에는, 한정적인 서버 자원에서 서버의 과부하를 .. 2025. 3. 9.
반응형