[블로그 글쓰기 챌린지: Writing Mob 27회]

by 서준수

[블로그 글쓰기 챌린지: Writing Mob]에 대한 간단한 안내


27회 차에는 serialization, Jetpack Compose, 비트맵(Bitmap) 이미지 메모리 최적화, 코루틴에 관한 내용을 담고 있습니다. 자세한 내용은 아래 링크에서 확인하실 수 있습니다. 많은 관심과 응원 부탁드립니다. 좋아요 또는 댓글은 각 블로그에 직접 남겨 주시면 좋겠습니다. 감사합니다.


잘못된 내용이나 사소한 오탈자 등 소중한 피드백은 대환영입니다. 해당 블로그에 댓글로 남겨 주시면 감사하겠습니다.


아래 내용은 Gemini를 통해 요약하였습니다.


케이엠

https://velog.io/@kmkim2689/kotlinx-serialization-polymorphism-internals

코틀린(Kotlin) 환경에서 kotlinx-serialization 라이브러리가 리플렉션(reflection) 없이 직렬화와 다형성(polymorphism)을 어떻게 효율적으로 처리하는지 그 내부 원리를 분석합니다. 기존의 리플렉션 기반 직렬화 방식은 런타임 성능 저하와 다중 플랫폼 제약이라는 한계가 있었으나, 해당 라이브러리는 컴파일러 플러그인을 활용해 컴파일 타임에 직렬화 코드를 자동 생성하는 방식으로 이를 해결합니다. 특히 sealed class를 통한 다형성 처리 시, 컴파일러가 사전에 모든 하위 클래스 정보를 파악하여 타입 판별자(type discriminator)를 포함한 전용 직렬화 객체를 미리 구성합니다. 결과적으로 런타임 단계에서의 동적 탐색 비용을 제거하여, 다형성이 적용된 복잡한 데이터 구조에서도 플랫폼에 구애받지 않고 안전하고 빠른 직렬화 및 역직렬화 환경을 제공합니다.


이든

https://devfeijoa.tistory.com/3

Jetpack Compose 환경에서 안정적이고 예측 가능한 UI를 구축하기 위한 상태(State) 관리 및 데이터 흐름 설계 가이드라인을 제시합니다. 이를 위해 단방향 데이터 흐름(UDF) 패턴을 적용하여 상태는 하위로, 이벤트는 상위로 흐르는 구조를 확립하며, 화면 회전과 같은 생명주기 유지 및 비즈니스 로직 포함 여부에 따라 상태를 Composable 내부에 유지할지 ViewModel로 호이스팅(Hoisting)할지에 대한 명확한 기준을 제안합니다. 구체적인 구현 방안으로는 UiState sealed class를 활용한 명시적 상태 정의, StateFlow와 생명주기를 인식하는 collectAsStateWithLifecycle()을 통한 최적화된 데이터 수집, 그리고 SharedFlow를 이용한 일회성 이벤트(Navigation, Snackbar 등) 처리 기법을 분석합니다. 결과적으로 이러한 아키텍처 접근 방식은 상태 변경의 추적 가능성을 높여, 유지보수가 용이하고 견고한 안드로이드 애플리케이션을 개발하는 데 기여합니다.


페토

https://chanho-study.tistory.com/187

안드로이드(Android) 환경에서 비트맵(Bitmap) 이미지를 처리할 때 발생하는 메모리 할당 문제와 그 최적화 방안을 제시합니다. 고해상도 이미지를 원본 해상도 그대로 디코딩할 경우, 픽셀당 바이트 수(예: ARGB_8888 포맷 기준 4바이트)에 비례하여 과도한 메모리가 소모되어 OOM(Out Of Memory) 오류가 발생할 위험이 있습니다. 이를 해결하기 위해 inJustDecodeBounds 속성을 사용하여 실제 디코딩 없이 원본 이미지의 크기만을 우선 측정한 후, inSampleSize를 활용해 목표 해상도에 맞추어 이미지를 축소 디코딩하는 기법을 제안합니다. 실제 기기 측정 결과, 해당 최적화 기법을 적용하면 이미지 로딩 시 발생하는 메모리 사용량을 원본 대비 약 75%가량 대폭 절감할 수 있으며, 결과적으로 애플리케이션의 안정성과 메모리 효율을 효과적으로 향상시킬 수 있습니다.


미플

https://velog.io/@sinabro0209/Compose-State-Hoisting%EC%9D%98-%EB%B3%B8%EC%A7%88-%EC%83%81%ED%83%9C-%EC%86%8C%EC%9C%A0%EA%B6%8C%EA%B3%BC-%EC%8B%A4%ED%96%89-%EB%AA%A8%EB%8D%B8%EB%A1%9C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

Jetpack Compose 환경에서 상태 끌어올리기(State Hoisting)의 본질을 상태 소유권(State Ownership)과 실행 모델(Execution Model) 관점에서 분석합니다. Compose의 스냅샷(Snapshot) 시스템은 상태의 읽기 기록을 추적하여 화면을 재구성하므로, 상태가 여러 곳으로 파편화될 경우 단일 진실 공급원(Single Source of Truth)이 붕괴하고 데이터 일관성이 훼손되는 문제를 야기합니다. 이를 해결하기 위해 상태 끌어올리기를 적용하면, 상태를 전담하여 관리하는 소유자(Stateful)와 상태를 전달받아 소비만 하는 컴포넌트(Stateless)로 역할이 명확히 분리됩니다. 결과적으로 상태는 아래로, 이벤트는 위로 흐르는 단방향 데이터 흐름(UDF)이 구축되며, 상태의 공유 범위와 수명 주기에 따라 적절한 계층으로 소유권을 격리함으로써 UI의 예측 가능성, 재사용성 및 테스트 용이성을 극대화하는 구조적 설계 전략을 제시합니다.


심지

https://velog.io/@sh1mj1/State-Hoisting%EC%9D%80-%EC%83%81%ED%83%9C%EC%9D%98-DI%EB%8B%A4

선언형 UI 프레임워크(Compose, React, SwiftUI, Flutter 등)에서 널리 사용되는 '상태 끌어올리기(State Hoisting)' 기법이 본질적으로 객체 지향 설계의 '의존성 주입(Dependency Injection, DI)'과 동일한 구조적 특성을 지님을 분석합니다. 컴포넌트가 자체적으로 상태를 소유하고 생성하는 대신 외부에서 상태와 이벤트를 주입받는 방식을 취함으로써, 제어의 역전(IoC)을 이끌어내고 UI의 재사용성 및 테스트 용이성을 극적으로 향상시킬 수 있음을 보여줍니다. 더불어, 모든 상태를 최상위 계층으로 무분별하게 끌어올리는 것은 DI에서의 과도한 전역 싱글톤 남용과 같은 안티패턴(불필요한 결합도 증가 및 렌더링 범위 확대)을 초래할 수 있음을 지적하며, 상태를 필요로 하는 컴포넌트들의 '최소 공통 조상'까지만 상태를 유지하는 적절하고 제한적인 설계 원칙의 중요성을 제언합니다.


포르

https://jiyuneel.tistory.com/9

코틀린 코루틴(Kotlin Coroutines) 환경에서 콜백(Callback) 패턴 남용으로 인해 발생하는 코드 가독성 저하 및 유지보수 문제를 제기하고, 이를 suspend 함수를 활용해 개선하는 방안을 제안합니다. 기존의 중첩된 콜백 방식은 에러 처리를 분산시키고 비동기 흐름의 복잡도를 높이는 한계가 있었습니다. 이를 해결하기 위해 코루틴의 일시 중단 및 재개 특성을 지닌 suspend 함수를 적용하여, 복잡한 비동기 로직을 직관적인 동기식 코드 흐름으로 재구성하였습니다. 실제 프로젝트의 다단계 인증 로직에 해당 방식을 적용한 결과, 코드의 중첩 깊이가 감소하고 예외 처리가 통합되어 전체적인 가독성과 단일 책임 분리가 크게 향상됨을 확인하였습니다. 결론적으로 suspend 함수의 적극적인 도입은 코루틴 본연의 철학을 살려 비동기 코드의 품질을 높이는 데 효과적으로 기여합니다.

매거진의 이전글[블로그 글쓰기 챌린지: Writing Mob 26회]