Compose 아티클

Compose 태그가 붙은 모든 Dove Letter 아티클입니다. Google Developer Expert (GDE)인 엄재웅 (skydoves)이 직접 작성한 심층 기술 아티클을 한국어로 만나보세요.

Navigation 3의 내부 동작 원리

Navigation 3는 Jetpack의 Compose 전용 내비게이션을 처음부터 새로 설계한 라이브러리입니다. Navigation 2가 Fragment 기반 내비게이션 모델을 NavController와 XML 그래프 정의를 통해 Compose에 적용한 것과...

ComposeKotlin
2026년 4월 14일구독자 전용

Jetpack Compose의 안정성(Stability)을 활용한 앱 성능 최적화

Compose의 성능 모델은 하나의 핵심 원칙에 기반합니다. 바로 불필요한 작업을 건너뛰는 것입니다. 런타임이 컴포저블의 입력값이 변경되지 않았음을 증명할 수 있으면, 해당 컴포저블의 재실행을 통째로 건너뜁니다. 이 최적화를 스킵skipping이라고 하며,...

ComposePerformance
2026년 4월 10일구독자 전용

Jetpack Compose에서 나만의 Landscapist 이미지 플러그인 만들기

Landscapist는 Jetpack Compose와 코틀린 멀티플랫폼Kotlin Multiplatform을 위한 컴포저블 이미지 로딩 라이브러리입니다. 여러 이미지 컴포저블 중에서도 LandscapistImage가 가장 권장되는 선택지인데, Jetpack...

ComposeAndroidKotlin
2026년 3월 28일공개

Compose 드로잉 시스템의 내부 동작 원리

모든 Compose 앱은 이미지를 그립니다. ImagepainterResourceR.drawable.photo를 호출하여 비트맵을 표시하든, IconIcons.Default.Search로 Material 아이콘을 렌더링하든, 벡터 드로어블vector...

ComposeKotlin
2026년 3월 21일구독자 전용

Compose의 7가지 그룹 타입

여러분이 작성하는 모든 @Composable 함수는 눈에 보이지 않는 스캐폴딩scaffolding을 생성합니다. Compose 컴파일러는 각 Kotlin 구조를 "그룹group"으로 감싸고, 이 그룹이 리컴포지션Recomposition 과정에서 런타임에 어떤...

ComposeKotlin
2026년 3월 17일구독자 전용

Compose Preview의 내부 동작 원리

Compose를 사용하는 모든 안드로이드 개발자라면 컴포저블 함수 위에 @Preview를 작성하고, Android Studio의 디자인 패널에 UI가 렌더링되는 것을 경험해 보셨을 것입니다. 하지만 이 어노테이션 하나가 실제 렌더링된 픽셀로 변환되기까지...

ComposeAndroidKotlin
2026년 3월 15일공개

Jetpack Compose 내부에 숨겨진 다섯 가지 알고리즘과 자료구조

Jetpack Compose는 겉으로 보기에 UI 툴킷에 불과하지만, 내부적으로는 수십 년에 걸친 컴퓨터 과학 연구 성과를 적극적으로 활용하고 있습니다. 런타임은 텍스트 에디터에서 차용한 자료구조를 사용하여 컴포지션Composition 상태를 저장하며,...

ComposeAndroidKotlin
2026년 3월 11일구독자 전용

Compose가 값을 기억하는 방법: remember와 State 뒤에 숨겨진 위치 기반 메모이제이션

Compose를 사용해 본 개발자라면 누구나 remember { mutableStateOf0 } 코드를 작성해 본 경험이 있을 것입니다. 이 값은 리컴포지션Recomposition이 발생하더라도 별도의 명시적인 저장소 참조 없이 유지됩니다. ViewModel도,...

ComposeKotlin
2026년 3월 8일구독자 전용

갭 버퍼에서 링크드 리스트로: Compose가 더 빠른 리컴포지션을 위해 SlotTable을 재설계한 방법

Jetpack Compose는 전체 컴포지션Composition 트리를 SlotTable이라는 자료구조에 저장합니다. 모든 컴포저블Composable 호출, remember로 기억한 값, 모든 키가 이 테이블 안에 그룹group과 슬롯slot으로 기록됩니다....

ComposeKotlin
2026년 3월 1일구독자 전용

스냅샷이란 무엇인가? Compose의 격리된 상태 세계 이해하기

Jetpack Compose는 스냅샷Snapshot이라는 시스템을 통해 UI 상태를 관리합니다. 데이터베이스 이론에서 차용한 이 개념은 공유된 가변 상태shared mutable state에 대한 격리된 동시 접근을 지원합니다. var count by...

ComposeKotlin
2026년 2월 22일구독자 전용

스냅샷 시스템: Compose가 상태 변경을 추적하고 일괄 처리하는 방법

Jetpack Compose는 선언적declarative 접근 방식으로 안드로이드 UI 개발에 혁신을 가져왔습니다. 하지만 Compose를 진정으로 강력하게 만드는 핵심은 그 이면에 있는 정교한 내부 메커니즘에 있습니다. Compose의...

ComposeKotlin
2026년 2월 22일구독자 전용

Jetpack Compose로 구글 맵스 스타일 바텀 시트 만들기

구글 맵스Google Maps는 대부분의 안드로이드 개발자가 즉시 알아볼 수 있는 바텀 시트bottom sheet 패턴을 대중화했습니다. 화면 하단에서 살짝 올라온 작은 패널이 중간 높이까지 확장되어 간략한 정보를 보여주고, 전체 화면으로 드래그하면 상세 정보를...

ComposeAndroidKotlin
2026년 2월 15일공개

Compose Stability Analyzer 0.7.0: 리컴포지션 연쇄 시각화와 Live Heatmap

Jetpack Compose의 안정성stability 시스템은 컴포저블 함수가 리컴포지션Recomposition 중에 스킵될 수 있는지를 결정합니다. 모든 매개변수가 안정적stable이면, Compose는 이전 값과 비교하여 변경이 없을 경우 해당 함수의...

ComposeKotlin
2026년 2월 13일공개

DerivedState: 의존성 추적 없이 해시 기반으로 무효화하는 메커니즘

Compose의 derivedStateOf는 계산된 결과가 실제로 변경되었을 때만 리컴포지션Recomposition을 트리거하는 파생 상태derived state를 생성하는 수단을 제공합니다. val fullName by remember {...

ComposeKotlin
2026년 2월 10일구독자 전용

Compose 아이덴티티 메커니즘: key()가 Movable Group으로 변환되는 과정

Jetpack Compose는 정교한 아이덴티티identity 시스템을 통해 UI 상태를 관리하며, 이를 바탕으로 컴포저블을 재사용할지 아니면 새로 생성할지를 결정합니다. keyuserId { UserCarduser }와 같이 콘텐츠를 감싸면,...

ComposeKotlin
2026년 2월 5일구독자 전용

Runtime Saveable: Compose가 프로세스 종료 이후에도 상태를 보존하는 방법

Jetpack Compose는 안드로이드 UI 개발에 선언적declarative 패러다임을 도입했지만, 선언적이라고 해서 상태가 없는 것은 아닙니다. 사용자 인터랙션은 스크롤 위치, 텍스트 필드 내용, 확장된 섹션 등 다양한 상태를 만들어 내며, 이러한 상태는...

ComposeKotlin
2026년 1월 26일구독자 전용

Jetpack Compose의 실험적 Styles API 소개

Jetpack Compose의 Modifier 시스템은 컴포저블에 시각적 속성을 적용하는 핵심 수단이었습니다. background, padding, border 등의 Modifier를 체이닝하여 UI 요소의 외관과 동작을 구성하는 방식인데, 이 접근법은...

ComposeAndroidKotlin
2026년 1월 21일공개

세 가지 페이즈: Composition, Layout, Drawing

Jetpack Compose는 선언적declarative UI 코드를 화면의 픽셀로 변환하기 위해 Composition, Layout, Drawing이라는 세 가지 고유한 페이즈로 구성된 파이프라인을 거칩니다. 상태state 변수를 변경하면 Compose는 모든...

ComposeKotlin
2026년 1월 11일구독자 전용

Layout()을 활용한 복잡한 레이아웃 구현과 측정/배치 원리 이해

Jetpack Compose에서 복잡한 UI를 구현하다 보면, Box, Row, Column 같은 기본 레이아웃만으로는 한계를 느끼는 순간이 찾아옵니다. 물론 이러한 기본 컴포저블composable은 대부분의 일반적인 시나리오를 훌륭하게 처리하지만, 자식 요소의...

ComposeKotlin
2026년 1월 6일구독자 전용

Recompose Scopes: Compose는 어떻게 업데이트할 대상을 파악하는가

Jetpack Compose의 선언적declarative UI 패러다임은 간결함을 약속합니다. 상태의 함수로 UI를 선언하면, 프레임워크가 자동으로 업데이트를 처리합니다. 하지만 이 우아한 추상화 뒤에는 Compose를 놀라울 만큼 효율적으로 만들어 주는 정교한...

ComposeKotlin
2026년 1월 6일구독자 전용

Compose 컴파일러는 안정성을 어떻게 추론하고 타입을 결정할까?

Jetpack Compose는 스마트 리컴포지션Smart Recomposition 시스템을 활용하여 UI 업데이트를 최적화합니다. 이 최적화의 핵심에는 안정성 추론stability inference이 자리하고 있습니다. 안정성 추론이란, 특정 타입의 값이 시간이...

ComposeKotlin
2025년 11월 24일구독자 전용

Compose Remote란 무엇이며, 서버 주도 UI를 구축하는 데 어떻게 활용할 수 있을까

동적인 사용자 인터페이스를 구성하는 일은 안드로이드 개발에서 오랫동안 근본적인 과제로 남아 있었습니다. 기존의 전통적인 접근 방식에서는 UI를 변경할 때마다 애플리케이션 전체를 재컴파일하고 다시 배포해야 하며, 이 과정이 A/B 테스트, 피처 플래그feature...

ComposeKotlin
2025년 11월 24일구독자 전용

Crossfade 컴포저블의 내부 동작 메커니즘 탐구

Jetpack Compose에서 Crossfade는 서로 다른 두 UI 상태 간의 전환transition을 간결하고 선언적declarative으로 애니메이션 처리할 수 있는 방법을 제공합니다. Crossfade에 전달된 targetState가 변경되면, 기존...

ComposeKotlin
2025년 9월 28일구독자 전용

derivedStateOf 내부 구조: 관찰 비용의 실체와 왜 derivedStateOf가 비싼 연산인지 알아보기

Jetpack Compose의 derivedStateOf API는 기존 상태state로부터 파생된 메모이제이션 상태를 생성하는 편리한 메커니즘을 제공합니다. 의존하고 있는 상태가 변경될 때 자동으로 업데이트되므로 많은 시나리오에서 성능 최적화에 필수적이지만,...

ComposeKotlin
2025년 9월 28일구독자 전용

Jetpack Compose SlotTable 내부 구조 심층 분석

SlotTable은 Jetpack Compose 애플리케이션의 UI 트리를 메모리에 표현하는 핵심 자료구조입니다. 일반적인 객체 트리 형태가 아니라, 매우 빠른 UI 업데이트를 위해 고도로 최적화된 플랫flat 구조로 설계되어 있습니다. 이 글에서는...

ComposeAndroidKotlin
2025년 9월 28일구독자 전용

Google이 compose-runtime-annotation 라이브러리를 공식 출시했습니다

Google이 최근 공식 runtime-annotation 라이브러리를 출시했습니다. 이 라이브러리는 커뮤니티에서 먼저 만들어진 compose-stable-marker 라이브러리와 유사한 목적을 가지고 있습니다.

ComposeKotlin
2025년 8월 31일구독자 전용

Jetpack Compose 컴포넌트를 더 잘 만들기 위한 API 가이드라인 분석

Jetpack Compose 생태계는 최근 몇 년간 폭발적으로 성장했으며, 이제 안드로이드 애플리케이션에서 프로덕션 수준의 UI를 구축하는 데 널리 채택되고 있습니다. Jetpack Compose가 안드로이드 UI 개발의 미래라는 점은 이제 누구도 부정하기...

ComposeAndroidKotlin
2025년 8월 24일구독자 전용