Kotlin 아티클

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

Navigation 3의 내부 동작 원리

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

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

코틀린 컴파일러는 `when`에서 모든 Sealed 서브클래스를 어떻게 파악할까

sealed class에 대해 when 표현식을 작성하고, 모든 서브클래스를 빠짐없이 처리하면 컴파일러가 else 분기 없이도 코드를 통과시켜 줍니다. 그런데 같은 팀 동료가 다른 파일에 새로운 서브클래스를 하나 추가하는 순간, 프로젝트 내 모든 when...

Kotlin
2026년 4월 7일구독자 전용

Kotlin KSP 내부 구조: 어노테이션이 생성 코드로 변환되는 과정

Jetpack Room을 사용하면 모든 @Dao 인터페이스가 완전한 데이터베이스 구현체로 변환됩니다. Hilt를 사용하면 @Inject 생성자가 의존성 그래프에 자동으로 연결됩니다. Moshi를 사용하면 @JsonClass가 JSON 어댑터를 생성합니다....

Kotlin
2026년 4월 1일구독자 전용

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일구독자 전용

마법 뒤의 기계 장치: 코틀린이 suspend를 상태 머신으로 변환하는 과정

코틀린 코루틴Kotlin Coroutines은 JVM에서 비동기 프로그래밍의 표준으로 자리 잡았습니다. 코루틴 덕분에 스레드를 블로킹하지 않으면서도 순차적이고 읽기 쉬운 코드를 작성할 수 있으며, 필요할 때 일시 중단했다가 다시 재개할 수 있습니다. 대부분의...

CoroutinesKotlin
2026년 2월 24일공개

스냅샷이란 무엇인가? 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일공개

WorkManager 내부 구조: 보장된 백그라운드 작업이 실제로 동작하는 방식과 Service가 이를 대체할 수 없는 이유

안드로이드의 WorkManager는 영속적이면서도 지연 가능한deferrable 백그라운드 작업을 처리하기 위한 공식 권장 솔루션으로 자리잡았습니다. 앱 프로세스와 함께 생성되고 소멸되는 일시적인 백그라운드 작업과 달리, WorkManager는 사용자가 앱을...

CoroutinesKotlin
2026년 2월 12일구독자 전용

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

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

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

멀티 레이어 아키텍처에서 Sandwich를 활용한 확장 가능한 API 응답 처리

최근 안드로이드 애플리케이션은 MVVM이나 MVI 같은 멀티 레이어 아키텍처를 널리 채택하고 있습니다. 이러한 아키텍처에서는 데이터가 데이터 소스, 리포지토리, ViewModel또는 프레젠테이션 레이어과 같은 여러 계층을 거쳐 흐르게 됩니다. 각 계층은 고유한...

CoroutinesNetworkKotlin
2026년 2월 8일공개

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

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

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

ViewModel: 구성 변경에서 살아남는 원리

안드로이드의 ViewModel은 가장 널리 사용되는 아키텍처 컴포넌트 중 하나이지만, 핵심 생존 메커니즘survival mechanism을 깊이 이해하는 개발자는 많지 않습니다. 클래스에 어노테이션을 달고 Activity에서 viewModels를 호출하면 화면...

AndroidKotlin
2026년 1월 28일구독자 전용

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일공개

코루틴에서의 CancellationException 심층 분석

코틀린 코루틴은 구조화된 동시성structured concurrency을 핵심 원칙으로 도입하여, 코루틴이 부모 스코프의 생명주기에 맞게 적절히 관리되고 취소되도록 보장합니다. 이 메커니즘의 중심에는 CancellationException이라는 특수한 예외가...

CoroutinesKotlin
2026년 1월 18일구독자 전용

Landscapist Core의 내부 동작 원리 심층 분석

Landscapist Core는 코틀린 멀티플랫폼Kotlin Multiplatform을 위해 처음부터 새로 설계된 독립형 이미지 로딩 엔진입니다. Landscapist가 제공하는 Coil, Glide, Fresco 래퍼wrapper와 달리, Landscapist...

CoroutinesKotlin
2026년 1월 18일구독자 전용

세 가지 페이즈: 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일구독자 전용

ViewModel 내부 메커니즘과 멀티플랫폼 아키텍처 심층 분석

안드로이드의 ViewModel은 현대 안드로이드 개발에서 필수적인 컴포넌트로 자리잡았습니다. 구성 변경configuration changes에도 유지되는, 생명주기 인식lifecycle-aware UI 데이터 컨테이너를 제공하기 때문입니다. API 표면만 보면...

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

Coil 내부 동작 원리: LRU 캐싱, 성능 트레이드오프, 비트맵 샘플링

이미지 로딩은 안드로이드 개발에서 가장 핵심적이면서도 까다로운 영역 중 하나입니다. 네트워크 통신, 메모리 관리, 스레딩, 캐싱, 비트맵 디코딩 등 여러 복잡한 문제가 한꺼번에 얽혀 있기 때문입니다. Glide나 Picasso 같은 라이브러리가 오랫동안...

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

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일구독자 전용

코틀린 오류 처리의 새로운 진화: Rich Errors 제안서

코틀린은 개발자가 일상적으로 마주하는 프로그래밍 문제를 실용적으로 해결하는 언어로 오랫동안 사랑받아 왔습니다. 특히 null 안전성null-safety 시스템은 코틀린의 대표적인 강점 중 하나입니다. 하지만 복구 가능하고 예측 가능한 오류를 다루는 영역에서는...

Kotlin
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일구독자 전용

연구 분석: Java로 작성된 Retrofit은 어떻게 Kotlin의 코루틴을 보간하여 `suspend` 함수를 지원하는가

현대 안드로이드 개발 생태계에서 Kotlin과 Java 사이의 시너지는 여전히 매우 중요합니다. 특히 수많은 전통적인 프로젝트가 Java로 작성되어 있기 때문에, 두 언어 간의 원활한 협업은 필수적입니다. 이러한 뛰어난 상호운용성interoperability을...

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