면접 질문 모음

Android, Kotlin, Firebase 분야의 Google Developer Expert (GDE)인 엄재웅 (skydoves)이 2024년부터 Dove Letter를 운영해 오면서 직접 작성하고 검수한 기술 면접 질문과 상세한 답변이 정리되어 있습니다. 안드로이드, 코틀린, 코루틴, 컴포즈, 아키텍처 등 범용적인 주제에 대해 깊은 학습을 하실 수 있습니다.

R8 트리 쉐이킹(Tree Shaking), 최적화, 그리고 풀 모드(Full Mode)

R8은 안드로이드 애플리케이션의 기본 코드 축소기code shrinker, 최적화기, 그리고 난독화 도구입니다. 빌드 타임에 실행되어 컴파일된 바이트코드를 받아, 사용되지 않는 코드를 제거하고 인라이닝inlining과 역가상화devirtualization 같은...

AndroidPerformance
2026년 4월 5일구독자 전용

Compose의 3단계 렌더링 파이프라인

Compose에서 모든 프레임은 Composition, Layout, Drawing이라는 세 단계를 순서대로 거칩니다. Composition 단계에서는 컴포저블composable 함수를 재실행하여 노드 트리를 생성하거나 업데이트하고, Layout 단계에서는 각...

Compose
2026년 3월 23일공개

코루틴 취소와 CancellationException

코틀린 코루틴은 구조화된 동시성structured concurrency을 기반으로 한 협력적 취소cooperative cancellation 메커니즘을 통해 취소를 처리합니다. 취소가 발생하더라도 코루틴을 강제로 중단하는 것이 아니라, Job 계층 구조를 따라...

CoroutinesKotlin
2026년 3월 16일구독자 전용

Flow 컨텍스트 보존(Context Preservation)과 SafeCollector

Kotlin Flow는 엄격한 컨텍스트 보존 규칙을 적용합니다. 모든 방출emission은 Flow가 수집collect되는 코루틴 컨텍스트와 동일한 컨텍스트에서 이루어져야 합니다. 이 불변 조건invariant은 Flow 설계의 근간이 되는 원칙으로, 별도의...

CoroutinesKotlin
2025년 10월 27일구독자 전용

Hilt의 2단계 컴파일 모델과 증분 빌드

Hilt는 Dagger 위에 구축된 안드로이드용 컴파일 타임 의존성 주입dependency injection 프레임워크입니다. Hilt의 가장 핵심적인 아키텍처 결정은 어노테이션 프로세싱을 두 단계로 분리하는 2단계 컴파일 모델에 있습니다. 첫 번째 단계에서는...

ArchitectureAndroid
2025년 10월 20일구독자 전용

코루틴 디스패처(Coroutine Dispatchers)의 스레드 전환 원리

코루틴 디스패처Coroutine Dispatcher는 코틀린 코루틴이 어떤 스레드 또는 스레드 풀에서 실행될지를 제어하는 핵심 메커니즘입니다. 디스패처는 ContinuationInterceptor 인터페이스를 구현하여, 모든 Continuation을 재개하기...

CoroutinesKotlin
2025년 10월 13일구독자 전용

Suspend 함수 컴파일과 코루틴 상태 머신

코틀린의 suspend 함수는 소스 코드 상에서는 순차적인 코드처럼 보이지만, 컴파일러가 내부적으로 CPSContinuation-Passing Style 기반의 상태 머신state machine으로 변환합니다. 이 변환이야말로 코루틴 시스템 전체의 근간이 되는...

CoroutinesKotlin
2025년 10월 6일구독자 전용

Toast 내부 구조와 Context 의존성

안드로이드의 Toast는 가장 흔하게 사용되는 UI 컴포넌트 중 하나이지만, 내부 아키텍처를 들여다보면 안드로이드 프레임워크가 윈도우, 시스템 서비스, 스레딩을 관리하는 방식에 대한 핵심 개념들이 드러납니다. Toast는 단순한 텍스트 팝업이 아닙니다....

Android
2025년 9월 29일구독자 전용

인라인 함수와 바이트코드 최적화

코틀린의 inline 키워드는 JVM 언어 설계에서 근본적인 딜레마를 해결합니다. 고차 함수higher-order function와 같은 고수준 추상화를 제공하면서도 익명 클래스 할당과 가상 디스패치virtual dispatch에 따르는 런타임 비용을 제거해야...

Kotlin
2025년 9월 22일구독자 전용

코루틴 디스패처: IO vs Main

코틀린 코루틴은 코루틴이 무엇을 하는지와 어디에서 실행되는지를 분리합니다. 실행 위치를 결정하는 것이 바로 코루틴 디스패처coroutine dispatcher이며, 디스패처는 코루틴의 Continuation을 적절한 스레드에 할당하는 역할을 합니다. 안드로이드...

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

Jetpack Compose의 상태 호이스팅(State Hoisting)

상태 호이스팅state hoisting은 Jetpack Compose에서 예측 가능하고 재사용 가능하며 테스트하기 쉬운 UI 컴포넌트를 구축하기 위한 핵심 패턴 중 하나입니다. 기본 아이디어는 간단합니다. 컴포저블이 직접 상태를 소유하는 대신, 호출자caller...

Compose
2025년 8월 4일구독자 전용

연속 스크롤을 위한 멀티 레벨 이미지 캐싱

웹툰 리더 애플리케이션은 모바일 플랫폼에서 가장 까다로운 이미지 로딩 과제 중 하나입니다. 사용자는 고해상도 아트워크로 이루어진 세로 연속 스트립을 수직으로 스크롤하며, 한 화chapter당 수십 개의 개별 비트맵 타일을 넘나듭니다. 이때 실제 종이를 넘기듯...

ArchitectureAndroid
2025년 8월 4일구독자 전용

확장 가능한 안드로이드 뉴스 앱 아키텍처

단순한 프로토타입 수준을 넘어서는 안드로이드 애플리케이션에는 명확한 관심사 분리separation of concerns, 예측 가능한 데이터 흐름, 그리고 기능 확장에 맞춰 성장할 수 있는 계층 구조가 필수적입니다. Google의 공식 아키텍처 가이드는 이러한...

ArchitectureAndroid
2025년 7월 21일구독자 전용

안드로이드에서 실시간 채팅 아키텍처 설계하기

실시간 채팅 화면을 구현하려면 지속적인 네트워크 연결, 로컬 영속성persistence, 낙관적 UI 업데이트optimistic UI update, 그리고 효율적인 리스트 렌더링을 모던 안드로이드 아키텍처 안에서 조화롭게 조율해야 합니다. 채팅 도메인은...

ArchitectureAndroid
2025년 7월 14일구독자 전용

코틀린 코루틴에서 launch와 async의 차이

코틀린 코루틴은 동시성 작업을 시작하기 위한 두 가지 주요 코루틴 빌더coroutine builder를 제공합니다. 바로 launch와 async입니다. 두 빌더 모두 구조화된 동시성structured concurrency 스코프 내에서 새로운 코루틴을...

CoroutinesKotlin
2025년 7월 7일구독자 전용

안드로이드에서 UI 버벅임(Jank) 추적하기

UI 버벅임jank은 메인 스레드가 한 프레임의 데드라인 내에 작업을 완료하지 못할 때 발생하며, 사용자에게 눈에 보이는 끊김이나 프레임 드롭으로 나타납니다. 최신 안드로이드 기기에서 60Hz, 90Hz, 120Hz 등 다양한 주사율을 지원하기 때문에, 한...

AndroidPerformance
2025년 7월 7일구독자 전용

Activity 생명주기와 상태 보존

모든 안드로이드 Activity는 프레임워크의 ActivityManager 서비스와 ActivityThread 클래스가 관리하는 엄격한 생명주기lifecycle를 따릅니다. 시스템이 Activity를 포그라운드로 가져오거나, 전화 수신으로 일시 중지하거나,...

Android
2025년 6월 30일구독자 전용

앱 시작과 콜드 스타트(Cold Start) 최적화

사용자가 앱 아이콘을 탭했을 때 메모리에 아무것도 없는 상태라면, 시스템은 새로운 프로세스를 생성하고, Application 클래스를 로드한 뒤, ContentProvider를 인스턴스화하고, Application.onCreate를 호출한 후, 대상...

Android
2025년 6월 30일구독자 전용

APK Analyzer와 병합된 Android Manifest

Android Studio의 APK Analyzer는 리버스 엔지니어링 없이도 APK, AAB, ZIP 파일의 내부 구성을 검사할 수 있는 도구입니다. 개발자들이 주로 파일 크기나 DEX 메서드 수를 확인하는 용도로 사용하지만, 사실 가장 유용한 기능 중 하나는...

AndroidGradle
2025년 6월 23일구독자 전용

Jetpack Compose의 컴포저블 생명주기와 리컴포지션

Jetpack Compose에서 모든 컴포저블composable 함수는 세 가지 이벤트로 정의되는 생명주기를 따릅니다. 컴포지션Composition에 진입하고, 0회 이상 리컴포지션Recomposition을 수행하며, 최종적으로 컴포지션에서 벗어납니다. 전통적인...

Compose
2025년 6월 23일공개

Jetpack Compose에서의 안정성(Stability)과 불안정성(Unstable) 타입

Jetpack Compose는 컴포저블 함수의 매개변수가 가진 안정성stability을 기반으로, 부모 컴포저블이 리컴포지션Recomposition될 때 자식 컴포저블의 리컴포지션을 건너뛸 수 있는지 여부를 판단합니다. 안정적인stable 타입이란...

ComposePerformance
2025년 6월 16일구독자 전용

포그라운드 서비스의 액티비티 시작 제한

Android 10API 29부터 포그라운드 서비스를 실행 중인 앱은 백그라운드에서 직접 Activity를 시작하는 것이 원칙적으로 제한됩니다. 포그라운드 서비스가 사용자에게 인식되는 진행 중인 작업을 나타내더라도, 시스템은 새로운 Activity를 시작할 수...

Android
2025년 6월 16일구독자 전용

코틀린에서의 스레드와 코루틴 비교

스레드와 코루틴은 모두 동시 실행을 가능하게 하지만, 관리 방식, 블로킹 처리 방식, 리소스 소비량에서 근본적인 차이가 있습니다. 스레드는 운영 체제 수준의 구조물로서 자체 호출 스택call stack을 가지며, OS 스케줄러가 관리합니다. 반면 코루틴은 언어...

CoroutinesKotlin
2025년 6월 16일구독자 전용

원샷(One-Shot) 소스와 스트림(Stream) 소스를 위한 상태 생산 파이프라인

UI 상태 생산 파이프라인state production pipeline에서는 항목 삭제나 단일 레코드 조회와 같은 원샷one-shot 연산과, 리포지토리의 실시간 업데이트처럼 스트림 기반의 소스를 결합하는 경우가 흔히 발생합니다. 이때 권장하는 전략은 원샷...

ComposeArchitecture
2025년 6월 9일구독자 전용

LazyColumn 아이템 키와 상태 보존

LazyColumn의 아이템이 순서가 바뀌거나 추가, 삭제될 때 Jetpack Compose는 각 아이템의 remember 상태를 올바른 데이터에 연결해 두어야 합니다. 아이템 키item key가 바로 이 연결 고리 역할을 합니다. 키를 명시하지 않으면...

ComposePerformance
2025년 6월 2일구독자 전용

단방향 데이터 흐름에서 일시적 메시지 처리하기

스낵바Snackbar와 같은 일시적 UI 메시지는 네트워크 요청 실패나 특정 작업 완료 등 ViewModel 로직에서 발생하는 경우가 많습니다. 단방향 데이터 흐름Unidirectional Data Flow, UDF 아키텍처에서는 이러한 메시지를 일회성...

ArchitectureAndroid
2025년 6월 2일구독자 전용

Baseline Profiles와 앱 성능 최적화

Baseline Profiles는 프로파일 가이드 최적화Profile Guided Optimization, PGO의 한 형태로, 사용자가 접하는 핵심 코드 경로에 대해 AOTAhead-of-Time 컴파일을 가능하게 함으로써 첫 실행부터 안드로이드 앱의 성능을...

AndroidPerformance
2025년 5월 26일구독자 전용

Android Studio의 Build Analyzer

Build Analyzer는 Android Studio에 내장된 도구로, 어떤 Gradle 태스크와 플러그인이 빌드 시간에 가장 큰 영향을 미치는지 상세한 데이터를 제공하여 빌드 성능 문제를 감지하고 해결하는 데 도움을 줍니다. 빌드 간 리포트를 비교하면 성능...

AndroidGradle
2025년 5월 26일구독자 전용

Jetpack Compose에서 상태 기반(State-Based) 텍스트 필드와 값 기반(Value-Based) 텍스트 필드 비교

Jetpack Compose는 텍스트 입력을 처리하기 위해 값 기반value-based 텍스트 필드와 상태 기반state-based 텍스트 필드, 두 가지 접근 방식을 제공합니다. 이 두 방식은 입력 상태 관리, 텍스트 변환 처리, 줄 수 제한 설정, 보안 입력...

Compose
2025년 5월 26일구독자 전용

compositionLocalOf vs staticCompositionLocalOf

Jetpack Compose는 컴포지션Composition 트리를 따라 데이터를 암묵적으로 전달하는 메커니즘으로 CompositionLocal을 제공합니다. CompositionLocal을 사용하면 모든 컴포저블 함수의 매개변수로 데이터를 일일이 전달하지 않아도...

Compose
2025년 5월 19일구독자 전용

Jetpack Compose의 시맨틱스(Semantics)와 UI 테스트

Jetpack Compose는 시맨틱스Semantics 시스템을 통해 UI 요소의 시각적 외형 이상의 의미meaning를 정의합니다. 이 시스템은 접근성Accessibility 서비스와 테스트 프레임워크 양쪽에서 활용되며, 구현 세부 사항에 의존하지 않고도 UI...

ComposeTesting
2025년 5월 11일구독자 전용

코틀린 코루틴의 Channel과 Deferred

코틀린 코루틴은 코루틴 간 데이터를 전달하기 위한 두 가지 핵심 동시성 프리미티브concurrency primitive를 제공합니다. 바로 Channel과 Deferred입니다. Deferred<T는 미래에 완료될 단일 결과를 나타내고, Channel<T는 값의...

CoroutinesKotlin
2025년 5월 4일구독자 전용

Jetpack Compose의 커스텀 Modifier

Jetpack Compose에서는 커스텀 Modifier를 생성하는 여러 가지 방법을 제공하며, 각 접근 방식은 단순성, 유연성, 성능 사이에서 서로 다른 트레이드오프를 가집니다. 적합한 방식을 선택하려면 Compose 상태state에 접근할 필요가 있는지,...

Compose
2025년 5월 4일구독자 전용

UI 레이어와 단방향 데이터 흐름(Unidirectional Data Flow)

안드로이드 아키텍처에서 UI 레이어는 두 가지 핵심 역할을 담당합니다. 첫째는 애플리케이션 데이터를 화면에 렌더링하는 것이고, 둘째는 사용자와 상호작용하는 인터페이스 역할입니다. UI 레이어 내에서 상태state가 어떻게 흘러가는지에 따라 전체 애플리케이션의...

ArchitectureAndroid
2025년 5월 4일구독자 전용

Jetpack Compose의 아키텍처 계층 구조

Jetpack Compose는 하나의 거대한 모놀리식 툴킷이 아니라, 계층화된 모듈형 프레임워크로 설계되어 있습니다. 각 계층은 하위 계층의 컴포넌트 위에 구축되며, 위로 올라갈수록 더 높은 수준의 추상화와 편의성을 제공합니다. 동시에 개발자가 사용 사례에 맞는...

ComposeArchitecture
2025년 4월 28일구독자 전용

코틀린 코루틴을 활용한 비동기 프로그래밍 개선

코틀린 코루틴은 안드로이드 비동기 프로그래밍을 위한 구조적이고 경량화된 솔루션을 제공합니다. 스레드를 블로킹하지 않으면서도 코드의 가독성을 유지할 수 있도록 설계되어 있으며, 네트워크 요청과 같은 백그라운드 작업을 메인 스레드를 멈추지 않고 수행할 수 있습니다....

CoroutinesKotlin
2025년 4월 28일구독자 전용

안드로이드 단위 테스트 (Unit Testing)

단위 테스트unit test란 함수, 클래스, 또는 작은 컴포넌트 같은 하나의 "단위unit"를 나머지 시스템으로부터 격리하여 정확성을 검증하는 테스트입니다. 안드로이드 개발에서 단위 테스트는 주로 비즈니스 로직, 유틸리티 클래스, 또는 ViewModel의...

TestingAndroid
2025년 4월 28일구독자 전용

Jetpack Compose에서 UI 상태 저장 및 관리

Jetpack Compose에서 UI 상태를 보존하는 것은 매끄러운 사용자 경험을 유지하기 위해 필수적입니다. 특히 구성 변경configuration changes이 발생하거나 시스템이 프로세스를 종료process death한 뒤 앱이 복원되는 상황에서 상태가...

Compose
2025년 4월 21일구독자 전용

안드로이드 개발에서의 Lint 검사

안드로이드 개발에서 깔끔하고 일관되며 오류 없는 코드를 유지하는 것은 앱의 안정성과 장기적인 유지보수에 필수적입니다. Lint는 Android Studio에 내장된 정적 코드 분석static code analysis 도구로, 앱을 실행하거나 빌드하기 전에...

AndroidGradle
2025년 4월 21일구독자 전용

안드로이드에서 장기 실행 백그라운드 작업 관리하기

안드로이드는 장기 실행 백그라운드 작업을 처리하기 위한 다양한 메커니즘을 제공합니다. 이러한 메커니즘은 시스템 리소스를 효율적으로 사용하면서도 최신 OS의 백그라운드 실행 제한 정책을 준수하도록 설계되어 있습니다. 작업의 성격, 긴급도, 그리고 앱 생명주기와의...

Android
2025년 4월 14일구독자 전용

Jetpack Compose의 리컴포지션(Recomposition)

Jetpack Compose에서 리컴포지션Recomposition은 관찰 가능한 상태state가 변경될 때 UI를 업데이트하는 핵심 프로세스입니다. Compose의 반응형 프로그래밍 모델에서 가장 중심적인 역할을 담당하며, 컴포지션 생명주기의 핵심 메커니즘 중...

Compose
2025년 4월 14일구독자 전용

코틀린 컬렉션 확장 함수를 활용한 데이터 추출

Kotlin은 컬렉션에서 특정 부분 집합이나 원하는 요소를 추출하기 위한 다양한 확장 함수extension function를 제공합니다. 이 함수들은 원본 컬렉션을 변경하지 않으면서도 효율적으로 데이터를 꺼내올 수 있도록 설계되어 있습니다. 각 상황에 맞는...

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

ViewStub을 활용한 UI 성능 최적화

ViewStub은 레이아웃 인플레이션layout inflation을 명시적으로 필요한 시점까지 지연시키기 위해 사용하는 경량의 보이지 않는 플레이스홀더placeholder 뷰입니다. 앱의 생명주기 동안 즉시 필요하지 않거나 아예 사용되지 않을 수 있는 뷰를...

AndroidPerformance
2025년 4월 7일구독자 전용

Jetpack Compose의 시각적 애니메이션

Jetpack Compose는 UI 상태 간 부드러운 전환을 구현할 수 있는 선언적declarative 애니메이션 시스템을 제공합니다. 내장 API를 활용하면 컴포저블composable의 등장과 퇴장, 콘텐츠 변경, 크기 조절, 프로퍼티 전환 등 다양한...

Compose
2025년 3월 31일구독자 전용

RecyclerView를 활용한 대용량 데이터셋 페이징

페이징paging 시스템은 대용량 데이터셋을 다룰 때, 데이터를 로드하고 화면에 표시하는 방식을 최적화하는 기법입니다. 작고 관리하기 쉬운 단위chunk로 나누어 데이터를 가져오기 때문에, 앱의 성능을 안정적으로 유지하면서 더 나은 사용자 경험을 제공할 수...

AndroidPerformance
2025년 3월 31일구독자 전용

runBlocking을 신중하게 사용해야 하는 이유

runBlocking은 코틀린에서 일반적인 블로킹 코드와 suspend 함수를 연결해 주는 코루틴 빌더입니다. 코루틴 실행이 완료될 때까지 현재 스레드를 블로킹하는 방식으로 동작하며, suspend 함수를 비非 suspend 컨텍스트에서 호출할 때 편리해 보일...

CoroutinesKotlin
2025년 3월 17일구독자 전용

안드로이드 뷰 시스템에서의 뷰 무효화(View Invalidation)

뷰 무효화invalidation란 특정 View를 다시 그려야 한다고 표시하는 과정을 의미합니다. 안드로이드 뷰 시스템에서 UI 변경 사항을 화면에 반영하기 위한 핵심 메커니즘이며, View가 무효화되면 시스템은 다음 드로잉 사이클drawing cycle에서...

Android
2025년 3월 17일구독자 전용

APK와 AAB의 차이점

안드로이드 애플리케이션은 두 가지 주요 형식으로 배포됩니다. APKAndroid Package와 AABAndroid App Bundle가 바로 그것입니다. APK는 모든 기기 구성에 필요한 리소스를 통째로 포함하는 전통적인 설치 형식이며, AAB는 Google이...

AndroidGradle
2025년 3월 10일구독자 전용

코틀린의 고차 함수 (Higher Order Functions)

고차 함수higher-order function란 다른 함수를 매개변수로 받거나, 함수를 반환하거나, 혹은 두 가지를 모두 수행하는 함수를 의미합니다. 이 개념은 코틀린이 함수형 프로그래밍functional programming을 지원하는 데 핵심적인 역할을...

Kotlin
2025년 3월 10일구독자 전용

Lazy Layout으로 대량 리스트를 효율적으로 렌더링하기

Jetpack Compose에서 수백, 수천 개의 아이템을 화면에 표시해야 할 때, Column과 같은 일반 레이아웃은 화면에 보이는지 여부와 관계없이 모든 자식 컴포저블을 한꺼번에 컴포지션합니다. 이로 인해 불필요한 메모리 소비와 컴포지션 오버헤드가 발생하며,...

Compose
2025년 3월 10일구독자 전용

코틀린의 Backing Field와 Backing Property

Kotlin 프로퍼티는 접근자accessor를 포함하는 필드를 간결한 문법으로 선언할 수 있게 해줍니다. 이 문법 뒤편에서는 프로퍼티 값의 실제 저장을 관리하는 두 가지 메커니즘이 존재합니다. 바로 backing field와 backing property입니다.

Kotlin
2025년 3월 3일구독자 전용

다중 Activity 간 생명주기 전환

두 개의 Activity 사이를 전환할 때 생명주기 콜백이 어떤 순서로 호출되는지 이해하는 것은 리소스 관리, 상태 보존, 그리고 화면 전환 시 시각적 결함visual glitch 방지에 필수적입니다. 안드로이드 시스템은 나가는 Activity와 들어오는...

Android
2025년 3월 3일구독자 전용

Jetpack Compose에서 네트워크 이미지 로딩하기

Jetpack Compose에는 네트워크 URL로부터 이미지를 로딩하는 빌트인 API가 포함되어 있지 않습니다. 이는 의도적인 설계 결정으로, 네트워크 이미지 로딩에는 HTTP 요청, 비트맵 디코딩, 메모리 및 디스크 캐싱, 다운샘플링downsampling,...

ComposeNetwork
2025년 3월 3일구독자 전용

Jetpack Compose의 produceState

produceState 함수는 컴포지션Composition 내부에서 코루틴을 실행하여 State 객체의 값을 생성하는 Compose API입니다. 네트워크 요청, 데이터베이스 쿼리, 장기 실행 연산 등 비동기 작업의 결과를 Compose의 반응형...

ComposeCoroutines
2025년 2월 24일구독자 전용

안드로이드 애플리케이션 크기 줄이기

안드로이드 애플리케이션의 크기를 최적화하면 다운로드 전환율, 저장 공간이 제한된 디바이스에서의 설치 성공률, 그리고 업데이트 수용률에 직접적인 영향을 미칩니다. 최종 APK 또는 AAB 크기를 최소화하려면 빌드 설정부터 리소스 최적화, 모듈식 전달에 이르기까지...

AndroidPerformance
2025년 2월 24일구독자 전용

코틀린의 가시성 수정자(Visibility Modifiers)

코틀린은 클래스, 인터페이스, 함수, 프로퍼티의 접근 범위를 제어하는 네 가지 가시성 수정자visibility modifier를 제공합니다. public, private, protected, internal 이 네 가지 수정자는 코드 접근에 대한 명확한 경계를...

Kotlin
2025년 2월 24일구독자 전용

Baseline Profiles를 활용한 안드로이드 성능 최적화

Baseline Profiles는 앱의 시작 시간을 단축하고 런타임 실행 성능을 높여 주는 안드로이드 성능 최적화 기능입니다. 사전에 컴파일해야 할 코드 정보를 안드로이드 런타임ART에 제공함으로써, 앱 설치 시점에 주요 코드 경로를 미리 컴파일할 수 있도록...

AndroidPerformance
2025년 2월 17일구독자 전용

val은 읽기 전용이지 불변이 아닌 이유

Kotlin에서 val 키워드는 불변성immutability을 보장한다고 흔히 오해받지만, 실제로는 초기화 이후 참조 재할당만 금지할 뿐입니다. 참조가 가리키는 객체 자체의 변경까지 막아 주지는 않습니다. 이 참조 불변성reference immutability과...

Kotlin
2025년 2월 17일구독자 전용

Jetpack Compose의 Box 레이아웃

Box는 Jetpack Compose에서 가장 기본적인 레이아웃 컴포저블composable 중 하나로, 자식 요소들을 하나의 부모 영역 안에서 서로 겹쳐 쌓는 방식으로 배치합니다. Column이나 Row가 자식 요소를 하나의 축을 따라 순차적으로 배열하는 것과...

Compose
2025년 2월 10일구독자 전용

OkHttp Authenticator와 Interceptor를 활용한 OAuth 토큰 갱신

OAuth로 보호되는 API와 통신할 때, 토큰 만료 및 갱신 처리는 네트워킹 계층에서 매우 중요한 부분입니다. 실무에서도 거의 모든 프로젝트에서 마주치는 문제이므로, 면접에서 자주 등장하는 주제이기도 합니다. OkHttp는 이를 위한 두 가지 메커니즘을...

NetworkAndroid
2025년 2월 10일구독자 전용

코틀린의 Value Class

value class는 하나의 값을 래핑하면서, 런타임에 불필요한 객체 할당을 피하도록 컴파일러가 최적화하는 특수한 클래스입니다. 소스 코드 수준에서는 타입 안전성과 의미적 명확성을 제공하지만, 컴파일러는 가능한 한 호출 지점에서 래핑된 값을 인라인inline...

Kotlin
2025년 2월 10일구독자 전용

AndroidManifest 파일의 역할

AndroidManifest.xml 파일은 모든 안드로이드 프로젝트에 반드시 포함되어야 하는 필수 설정 파일입니다. 이 파일은 애플리케이션에 관한 핵심 정보를 안드로이드 운영 체제에 선언하며, 앱과 시스템 사이의 다리 역할을 수행합니다. 운영 체제는 앱 설치...

Android
2025년 2월 3일구독자 전용

컴포저블 함수에서 Flow를 안전하게 수집하기

컴포저블composable 함수 내부에서 Flow를 수집하는 것은 UI 상태를 관리하고 데이터 변경에 반응하기 위해 매우 흔히 사용되는 패턴입니다. 그러나 이를 올바르게 관리하지 않으면 메모리 누수, 불필요한 백그라운드 작업, 과도한...

ComposeCoroutines
2025년 2월 3일구독자 전용

Flow의 flowOn 연산자

flowOn 연산자는 Kotlin Flow에서 다운스트림downstream 수집기에 영향을 주지 않으면서 업스트림upstream 연산의 코루틴 컨텍스트를 변경하는 역할을 합니다. 비용이 큰 연산, IO 작업, 데이터베이스 쿼리 등을 백그라운드 스레드로 옮기면서도...

CoroutinesKotlin
2025년 2월 3일구독자 전용

안드로이드에서 Context 사용 시 주의 사항

Context는 안드로이드 개발에서 가장 빈번하게 사용되는 객체 중 하나입니다. 애플리케이션 리소스, 시스템 서비스, 데이터베이스, SharedPreferences, 파일 시스템 등에 접근할 때 반드시 필요하며, 안드로이드 프레임워크의 거의 모든 기능과 연결되어...

Android
2025년 1월 27일구독자 전용

코틀린 컬렉션 타입

코틀린은 요소의 그룹을 관리하기 위한 체계적인 컬렉션collection 타입을 제공합니다. 컬렉션은 크게 두 가지 범주로 나뉩니다. 접근 연산만 노출하는 읽기 전용read-only 컬렉션과 수정을 허용하는 가변mutable 컬렉션입니다. 이러한 구분은 별도의...

Kotlin
2025년 1월 27일구독자 전용

Jetpack Compose의 snapshotFlow

snapshotFlow는 Compose의 상태 관찰 시스템과 Kotlin의 Flow API를 연결해 주는 다리 역할을 합니다. Compose 스냅샷Snapshot 내부에서 읽힌 상태 값을 cold Flow로 변환하여, 관찰 중인 상태가 변경될 때마다 새로운 값을...

ComposeCoroutines
2025년 1월 27일구독자 전용

Kotlin의 Inner Class와 Nested Class

코틀린에서는 클래스 내부에 또 다른 클래스를 정의할 수 있으며, inner 키워드의 사용 여부에 따라 동작 방식이 달라집니다. inner 키워드 없이 선언된 nested class는 외부 클래스enclosing class에 대한 참조를 보유하지 않으며,...

Kotlin
2025년 1월 20일구독자 전용

안드로이드(Android)란 무엇인가

안드로이드Android는 리눅스 커널Linux Kernel을 기반으로 한 오픈소스 운영 체제로, Google이 개발하고 유지·관리하고 있습니다. 스마트폰과 태블릿 같은 터치스크린 모바일 기기를 주 대상으로 설계되었지만, 웨어러블, TV, 자동차, IoT 기기 등...

Android
2025년 1월 20일구독자 전용

LiveData

LiveData는 안드로이드 Jetpack 아키텍처 컴포넌트Architecture Components에서 제공하는 관찰 가능한 데이터 홀더observable data holder 클래스입니다. 생명주기 인식lifecycle-aware 기능을 갖추고 있어,...

ArchitectureAndroid
2025년 1월 13일구독자 전용

Jetpack Compose의 Composition

컴포지션Composition은 Jetpack Compose가 @Composable 함수를 실행하여 UI 트리를 구축하고 관리하는 핵심 프로세스입니다. @Composable 함수가 처음 실행되면, Compose 런타임은 해당 함수 호출을 내부 데이터 구조에...

Compose
2025년 1월 6일구독자 전용

안드로이드 로컬 데이터 영속성 (Local Data Persistence)

안드로이드는 로컬 데이터를 저장하고 영속적으로 유지하기 위한 다양한 메커니즘을 제공하며, 각 메커니즘은 서로 다른 데이터 형태와 접근 패턴에 맞게 설계되어 있습니다. 올바른 저장 방식을 선택하려면 해당 데이터가 단순한 키-값key-value 쌍인지, 구조화된...

Android
2025년 1월 6일구독자 전용

Kotlin에서 null + null의 동작 원리

Kotlin은 null 안전성null safety 시스템을 통해 null 값을 안전하게 처리하지만, null과 관련된 일부 동작은 여전히 개발자를 놀라게 할 수 있습니다. 면접에서 자주 등장하는 주제 중 하나가 바로 null + null을 평가하면 어떤 결과가...

Kotlin
2025년 1월 6일구독자 전용

Jetpack Compose의 선언적(Declarative) UI

Jetpack Compose는 선언적declarative UI 프레임워크로, 개발자가 UI를 단계별 명령으로 직접 조작하는 대신 주어진 상태state에 대해 UI가 어떤 모습이어야 하는지를 기술합니다. 프레임워크가 상태 변경을 관찰하고, UI 트리에서 영향을...

Compose
2024년 12월 30일구독자 전용

ActivityManager와 시스템 서비스 상호작용

ActivityManager는 안드로이드의 시스템 서비스system service로, 기기에서 실행 중인 액티비티, 태스크, 프로세스 및 메모리 상태에 대한 정보를 제공합니다. 시스템 수준의 리소스 사용량을 조회하고 애플리케이션 프로세스를 프로그래밍 방식으로...

Android
2024년 12월 23일구독자 전용

SurfaceView와 TextureView

안드로이드는 일반적인 뷰 드로잉 파이프라인 외부에서 콘텐츠를 렌더링하기 위한 두 가지 특수한 뷰 클래스를 제공합니다. 바로 SurfaceView와 TextureView입니다. 두 클래스 모두 비디오 재생, 카메라 프리뷰, 커스텀 그래픽 등 오프스크린...

Android
2024년 12월 23일구독자 전용

안드로이드 런타임(ART), Dalvik, 그리고 Dex 컴파일러

안드로이드 애플리케이션은 디바이스에서 실행되기 전에 고유한 컴파일 및 실행 파이프라인을 거칩니다. 안드로이드 런타임ART, ART의 전신인 Dalvik, 그리고 Dex 컴파일러는 각각 애플리케이션 코드를 제한된 하드웨어 환경에서 효율적으로 실행할 수 있도록...

AndroidPerformance
2024년 12월 16일구독자 전용

빌드 변형과 Product Flavors

안드로이드 빌드 시스템은 빌드 변형build variant과 Product Flavor를 활용하여 하나의 코드베이스에서 여러 버전의 애플리케이션을 생성할 수 있도록 설계되어 있습니다. 빌드 타입build type은 애플리케이션의 컴파일 및 패키징 방식을...

AndroidGradle
2024년 12월 16일구독자 전용

함수형 인터페이스와 SAM 변환

코틀린의 함수형 인터페이스functional interface는 SAMSingle Abstract Method 인터페이스라고도 불리며, 추상 메서드가 정확히 하나만 존재하는 인터페이스를 람다 표현식으로 인스턴스화할 수 있게 해 줍니다. 이 메커니즘 덕분에 콜백,...

Kotlin
2024년 12월 16일구독자 전용

Kotlin Multiplatform

코틀린 멀티플랫폼Kotlin Multiplatform, KMP은 JetBrains에서 개발한 프레임워크로, 여러 플랫폼 간에 코드를 공유하면서도 플랫폼별 네이티브 API에 대한 접근성을 유지할 수 있도록 설계되었습니다. 플랫폼 자체를 완전히 추상화하는...

Kotlin MultiplatformKotlin
2024년 12월 16일구독자 전용

Android Bundle

Bundle은 안드로이드에서 Activity, Fragment, Service 등 컴포넌트 간 데이터를 전달할 때 사용하는 키-값key-value 데이터 구조입니다. Bundle은 데이터를 운영 체제가 프로세스 경계를 넘어 전송하거나 구성...

Android
2024년 12월 9일구독자 전용

Jetpack Compose의 CompositionLocal

CompositionLocal은 Jetpack Compose에서 컴포지션Composition 트리를 따라 데이터를 암시적으로 전달하는 메커니즘입니다. 매번 컴포저블 함수의 매개변수로 데이터를 일일이 전달하지 않아도, 테마, 설정 정보, 플랫폼 의존성 등 여러...

Compose
2024년 12월 9일구독자 전용

오프라인 퍼스트 아키텍처(Offline First Architecture)

오프라인 퍼스트Offline First 설계란, 활성 네트워크 연결이 없더라도 애플리케이션이 정상적으로 동작하도록 로컬에 저장된 데이터를 우선 활용하고, 네트워크 연결이 복구되었을 때 원격 서버와 동기화하는 방식을 말합니다. 모바일 기기에서는 불안정하거나...

ArchitectureAndroid
2024년 12월 9일구독자 전용

코틀린의 스코프 함수 (Scope Functions)

스코프 함수scope function란 Kotlin 표준 라이브러리에서 제공하는 함수 집합으로, 특정 객체의 컨텍스트context 내에서 코드 블록을 실행할 수 있게 해줍니다. 스코프 함수를 사용하면 보일러플레이트 코드를 줄이고, 가독성을 높이며, 객체 초기화...

Kotlin
2024년 12월 9일구독자 전용

구조적 동등성과 참조적 동등성

코틀린은 객체를 비교할 때 두 가지 연산자를 제공합니다. 구조적 동등성structural equality을 검사하는 == 연산자와, 참조적 동등성referential equality을 검사하는 === 연산자가 바로 그것입니다. 구조적 동등성은 두 객체의 내용이...

Kotlin
2024년 12월 9일구독자 전용

안드로이드 파일 시스템

안드로이드 파일 시스템은 리눅스 커널 위에 구축된 구조화된 환경으로, 디바이스 전체의 데이터 저장을 관리하고 체계적으로 구성합니다. 각 애플리케이션에 격리된 저장 공간을 제공하고, 사용자 콘텐츠를 위한 공유 디렉터리와 운영 체제 자체를 위한 보호된...

Android
2024년 12월 2일구독자 전용

코틀린의 람다 표현식(Lambda Expressions)

람다 표현식lambda expression이란 이름이 없는 익명 함수로, 값처럼 다룰 수 있는 함수 리터럴입니다. 다른 함수의 인자로 전달하거나, 반환값으로 사용하거나, 변수에 저장하는 것이 모두 가능합니다. 람다는 코틀린의 함수형 프로그래밍을 떠받치는 핵심...

Kotlin
2024년 12월 2일구독자 전용

Stateful 컴포저블과 Stateless 컴포저블

Jetpack Compose에서 컴포저블composable은 자체적으로 상태state를 관리하는지, 아니면 외부로부터 상태를 전달받는지에 따라 stateful 컴포저블과 stateless 컴포저블로 분류할 수 있습니다. 이 두 가지의 차이를 명확히 이해하는 것은...

Compose
2024년 12월 2일구독자 전용

안드로이드의 Context

Context는 안드로이드에서 애플리케이션 리소스, 시스템 서비스, 컴포넌트 생명주기 정보에 접근할 수 있도록 해 주는 기본base 클래스입니다. 모든 Activity, Service, Application, BroadcastReceiver는 Context를...

Android
2024년 11월 25일구독자 전용

안드로이드의 Application 클래스

Application 클래스는 안드로이드에서 전역 애플리케이션 상태global application state를 유지하기 위한 기본 클래스입니다. Activity, Service, BroadcastReceiver, ContentProvider보다 먼저...

Android
2024년 11월 25일구독자 전용

Jetpack Compose의 mutableStateListOf와 mutableStateMapOf

Jetpack Compose는 스냅샷 상태snapshot state 시스템과 통합되는 관찰 가능한 컬렉션 타입으로 mutableStateListOf와 mutableStateMapOf를 제공합니다. 일반적인 MutableList나 MutableMap과 달리, 이...

Compose
2024년 11월 25일구독자 전용

코틀린에서의 경쟁 조건(Race Condition)

경쟁 조건race condition이란, 공유 가변 상태shared mutable state에 동시에 접근하는 여러 작업의 실행 순서에 따라 프로그램의 정확성이 달라지는 현상을 말합니다. 두 개 이상의 스레드 또는 코루틴이 적절한...

AndroidCoroutines
2024년 11월 25일구독자 전용

안드로이드 메모리 관리와 메모리 누수

안드로이드는 가비지 컬렉션Garbage Collection 메커니즘을 통해 메모리를 관리하며, 애플리케이션에서 더 이상 참조하지 않는 객체를 자동으로 회수합니다. Dalvik과 ART 런타임은 객체의 도달 가능성reachability을 추적하고, GC 사이클...

AndroidPerformance
2024년 11월 18일구독자 전용

Jetpack Compose의 derivedStateOf

Jetpack Compose는 상태 관리 유틸리티로 derivedStateOf를 제공합니다. derivedStateOf는 다른 관찰 가능한 상태observable state로부터 값을 계산하여 파생된 상태 객체를 생성합니다. 핵심 이점은 파생 연산이 매...

Compose
2024년 11월 18일구독자 전용

코틀린의 팩토리 패턴 (Factory Pattern)

팩토리 패턴Factory Pattern은 객체 생성을 전담 메서드나 클래스에 위임하는 생성 디자인 패턴creational design pattern입니다. 생성자를 직접 호출하는 대신 팩토리 메서드를 통해 객체를 만들기 때문에, 클라이언트 코드가 구체적인...

ArchitectureKotlin
2024년 11월 18일구독자 전용

안드로이드의 SparseArray

SparseArray는 정수int 키를 객체 값에 매핑하는 안드로이드 전용 자료구조로, HashMap<Integer, Object보다 메모리 효율이 높은 대안으로 설계되었습니다. 원시 타입primitive type int 키를 Integer 래퍼 객체로 변환하는...

AndroidPerformance
2024년 11월 18일구독자 전용

Cold Flow vs Hot Flow

코틀린의 Flow API는 두 가지 근본적으로 다른 방출emission 모델을 제공합니다. Cold Flow는 수집자collector가 존재할 때만 값을 생성하며, 새로운 수집자마다 처음부터 독립적으로 실행됩니다. 반면 Hot Flow는 수집자의 존재 여부와...

CoroutinesKotlin
2024년 11월 11일구독자 전용

Kotlin Extensions

코틀린의 확장extension은 기존 클래스의 소스 코드를 수정하거나 상속하지 않고도 새로운 함수와 프로퍼티를 추가할 수 있는 기능입니다. 컴파일러는 확장 호출을 정적으로 해석resolve하며, 실제로 대상 클래스에 멤버를 삽입하지 않습니다. 대신, 수신자를 첫...

Kotlin
2024년 11월 11일구독자 전용

LRU 캐시

LRULeast Recently Used 캐시는 고정된 용량을 가진 자료구조로, 용량이 초과되면 가장 오래 전에 접근한 항목을 제거합니다. 해시 맵을 통한 키 조회와 이중 연결 리스트doubly linked list를 활용한 접근 순서 추적을 결합하여, 조회와...

AndroidPerformance
2024년 11월 11일구독자 전용

Jetpack Compose의 리컴포지션(Recomposition)

리컴포지션Recomposition은 Jetpack Compose에서 입력 상태state가 변경되었을 때 컴포저블composable 함수를 다시 실행하는 과정입니다. Compose 런타임은 전체 UI 트리를 처음부터 다시 구성하지 않고, 어떤 컴포저블 함수가 어떤...

Compose
2024년 11월 11일구독자 전용

StateFlow vs SharedFlow

코틀린의 코루틴 라이브러리는 여러 수집자collector 간에 데이터를 공유하기 위한 두 가지 핫 Flowhot flow 타입을 제공합니다. 바로 StateFlow와 SharedFlow입니다. 두 타입 모두 수집자의 활성 여부와 관계없이 값을 방출하지만, 데이터...

CoroutinesKotlin
2024년 11월 11일구독자 전용

AndroidManifest.xml

AndroidManifest.xml 파일은 모든 안드로이드 애플리케이션 모듈의 루트에 반드시 존재해야 하는 필수 설정 파일입니다. 이 파일은 애플리케이션의 컴포넌트, 권한, 하드웨어 요구 사항, 메타데이터 등을 안드로이드 운영 체제에 선언하는 역할을 합니다....

Android
2024년 11월 4일구독자 전용

Jetpack Compose의 Arrangement와 Alignment

Jetpack Compose에서는 레이아웃 컨테이너 내부에 자식 요소를 배치할 때 두 가지 핵심 개념을 사용합니다. Arrangement는 주축main axis을 따라 자식 요소 간의 간격과 분배를 제어하며, Alignment는 교차축cross axis을 따라...

Compose
2024년 11월 4일구독자 전용

안드로이드에서의 빌더 패턴(Builder Pattern)

빌더 패턴Builder Pattern은 복잡한 객체를 단계별로 생성하기 위해 널리 사용되는 생성 디자인 패턴creational design pattern입니다. 여러 개의 생성자를 다양한 매개변수 조합으로 오버로딩하는 대신, 빌더 객체가 메서드 호출을 통해 설정...

ArchitectureAndroid
2024년 11월 4일구독자 전용

코틀린의 Companion Object

Kotlin에서 companion object는 클래스 내부에 companion object 키워드를 사용하여 선언하는 싱글톤singleton 객체입니다. companion object의 멤버는 특정 인스턴스가 아닌 클래스 자체에 속하며, Java의 static...

Kotlin
2024년 11월 4일구독자 전용

안드로이드에서의 구성 변경(Configuration Changes) 처리

구성 변경Configuration Changes이란 디바이스의 상태가 변화하여 사용 가능한 리소스에 영향을 미치는 상황을 말합니다. 화면 회전, 로케일언어 변경, 다크 모드 전환, 글꼴 크기 조절 등이 모두 구성 변경에 해당합니다. 기본적으로 안드로이드 시스템은...

Android
2024년 11월 4일구독자 전용

코틀린의 Domain Specific Languages (DSL)

코틀린에서 DSLDomain Specific Language, 도메인 특화 언어이란, 확장 함수와 수신자가 있는 람다lambda with receiver 등 코틀린 고유의 언어 기능을 활용하여 특정 문제 영역에 맞춤화된 미니 언어처럼 읽히는 API를 설계하는...

Kotlin
2024년 11월 4일구독자 전용

안드로이드 ANR 방지 전략

ANRApplication Not Responding은 앱이 메인 스레드를 너무 오랫동안 블로킹했을 때 안드로이드 시스템이 보여주는 응답 없음 경고입니다. 메인 스레드가 시스템이 정한 타임아웃 시간 내에 입력 이벤트를 처리하지 못하거나...

AndroidPerformance
2024년 10월 28일구독자 전용

Jetpack Compose의 사이드 이펙트(Side Effects)

Jetpack Compose에서 사이드 이펙트side effect란, 컴포저블 함수의 범위를 벗어나 리컴포지션Recomposition 이후에도 지속되는 모든 작업을 의미합니다. 컴포저블 함수는 본질적으로 입력 상태에 대한 순수 함수여야 하며, 동일한 상태가...

Compose
2024년 10월 28일구독자 전용

안드로이드에서의 옵저버 패턴(Observer Pattern)

옵저버 패턴Observer Pattern은 하나의 객체주체, Subject와 여러 의존 객체옵저버, Observer 사이에 일대다one-to-many 관계를 설정하여, 주체의 상태가 변경되면 등록된 모든 옵저버에 자동으로 알림을 보내는 디자인 패턴입니다....

ArchitectureAndroid
2024년 10월 28일구독자 전용

안드로이드의 리포지토리 패턴(Repository Pattern)

리포지토리 패턴Repository Pattern은 데이터 접근 로직을 깔끔한 API 뒤에 추상화하는 디자인 패턴입니다. 애플리케이션의 나머지 부분이 데이터를 어떻게 가져오고, 캐싱하고, 영속화하는지에 대한 세부 구현에 의존하지 않도록 분리해 줍니다....

ArchitectureAndroid
2024년 10월 28일구독자 전용

Jetpack Compose의 SaveableStateHolder

SaveableStateHolder는 고유 식별자를 키로 사용하여 컴포저블 하위 트리의 rememberSaveable 상태를 독립적으로 보존하고 복원하는 Compose 인터페이스입니다. rememberSaveable이 구성 변경configuration...

Compose
2024년 10월 28일구독자 전용

Activity 생명주기(Activity Lifecycle)

안드로이드 Activity 생명주기는 Activity가 생성부터 소멸까지 거치는 일련의 상태 전환을 정의합니다. 시스템은 각 전환 시점에 특정 콜백callback 메서드를 호출하며, 이를 통해 앱은 리소스를 초기화하거나, 상태를 저장하고, 리소스를 해제하며,...

Android
2024년 10월 21일구독자 전용

Jetpack Compose에서의 상태 호이스팅(State Hoisting)

상태 호이스팅state hoisting은 Jetpack Compose에서 하위 컴포저블composable이 보유한 상태state를 상위 호출자로 끌어올리는 패턴입니다. 이 패턴을 적용하면 하위 컴포저블은 상태를 소유하지 않는 무상태stateless 함수가 되며,...

Compose
2024년 10월 21일구독자 전용

코루틴 vs 스레드

코틀린 코루틴과 JVM 스레드는 모두 동시성concurrency 실행을 지원하지만, 근본적으로 서로 다른 추상화 수준에서 동작합니다. 스레드는 운영 체제가 관리하는 구조로 실제 커널 리소스를 소비하는 반면, 코루틴은 컴파일러가 생성한 상태 머신state...

CoroutinesKotlin
2024년 10월 21일구독자 전용

Fragment 생명주기

Fragment는 호스트 Activity의 생명주기와 밀접하게 연결되어 있으면서도 독립적인 자체 생명주기lifecycle를 갖습니다. Fragment는 생성, 뷰 생성, 가시성 확보, 인터랙티브 상태, 소멸이라는 단계를 거치며, 각 단계마다 전용 콜백이...

Android
2024년 10월 21일구독자 전용

View 생명주기

모든 안드로이드 View는 생성부터 소멸까지 일련의 단계를 거칩니다. View가 윈도우에 연결되고, 측정measure되고, 배치layout되고, 그려진draw 뒤 최종적으로 분리detach되는 과정에서 시스템은 각 시점에 맞는 특정 메서드를 호출합니다. 이러한...

Android
2024년 10월 21일구독자 전용

XML을 활용한 안드로이드 커스텀 뷰 (Custom Views in Android Using XML)

안드로이드의 뷰 시스템은 기본 View 클래스를 상속하고, 그리기drawing, 측정measurement, 레이아웃layout 메서드를 오버라이드하여 커스텀 UI 컴포넌트를 직접 만들 수 있도록 설계되어 있습니다. 여기에 커스텀 XML 속성attribute까지...

Android
2024년 10월 14일구독자 전용

의존성 주입과 제어의 역전 (Dependency Injection and Inversion of Control)

의존성 주입Dependency Injection은 객체가 필요한 의존성을 내부에서 직접 생성하지 않고, 외부로부터 전달받는 디자인 패턴입니다. 이 패턴을 통해 객체 생성에 대한 제어권이 소비 클래스에서 의존성 그래프dependency graph를 조립하는 별도...

ArchitectureAndroid
2024년 10월 14일구독자 전용

안드로이드 IPC에서의 Parcel과 Parcelable

안드로이드의 프로세스 간 통신IPC, Inter-Process Communication은 Parcel 클래스를 저수준 전송 컨테이너로 사용하며, Parcelable 인터페이스를 통해 객체가 자기 자신을 Parcel로 직렬화하는 계약contract을 정의합니다....

Android
2024년 10월 14일구독자 전용

Jetpack Compose에서 remember와 rememberSaveable 비교

Jetpack Compose는 일반적인 리컴포지션Recomposition 과정에서는 동일하게 동작하지만, 시스템이 컴포저블의 호스트를 소멸시키고 다시 생성할 때 서로 다르게 동작하는 두 가지 상태 유지 메커니즘을 제공합니다. remember는 단일 컴포지션 수명...

Compose
2024년 10월 14일구독자 전용

Sealed Classes와 제한된 계층 구조(Restricted Hierarchies)

코틀린의 sealed class는 컴파일 타임에 모든 서브타입이 확정되는 닫힌 집합closed set을 정의하며, 컴파일러가 패턴 매칭에서 가능한 모든 케이스를 처리했는지 검증할 수 있도록 합니다. 일반적인 open class와 달리 어떤 모듈에서든 새로운...

Kotlin
2024년 10월 14일구독자 전용

안드로이드에서의 직렬화(Serialization) vs Parcelable 비교

안드로이드는 객체를 전달 가능한 형태로 변환하기 위한 두 가지 메커니즘을 제공합니다. 하나는 Java 표준 라이브러리의 Serializable 인터페이스이고, 다른 하나는 안드로이드 고유의 Parcelable 인터페이스입니다. 두 방식 모두 Intent와...

Android
2024년 10월 14일구독자 전용

안드로이드 인텐트(Intent)와 컴포넌트 간 통신

안드로이드에서 Intent란 수행할 작업을 기술하는 메시징 객체입니다. 같은 프로세스 내의 컴포넌트든, 전혀 다른 애플리케이션에 속한 컴포넌트든, Intent는 이들 사이의 통신을 담당하는 핵심 메커니즘 역할을 합니다. Intent에는 수행할 액션action과...

Android
2024년 10월 7일구독자 전용

Jetpack Compose에서 리컴포지션 줄이기

Jetpack Compose는 입력값이 변경된 컴포저블 함수만 리컴포지션Recomposition하지만, 이 최적화는 컴파일러가 입력값의 안정성stability을 판별할 수 있느냐에 달려 있습니다. 컴파일러가 안정성을 증명하지 못하면 해당 매개변수를...

ComposePerformance
2024년 10월 7일구독자 전용

Data Class와 자동 생성 메서드

코틀린의 data class는 주 생성자primary constructor에 선언된 프로퍼티를 기반으로 equals, hashCode, toString, copy, componentN 함수를 컴파일러가 자동으로 생성하도록 지시하는 언어 기능입니다. 컴파일러가...

Kotlin
2024년 10월 7일구독자 전용

코틀린의 위임 프로퍼티(Delegated Properties)

Kotlin의 위임 프로퍼티delegated properties를 사용하면 프로퍼티의 getter와 setter 로직을 by 키워드를 통해 별도의 위임 객체delegate object에 맡길 수 있습니다. 컴파일러는 프로퍼티 접근을 위임 객체의 getValue와...

Kotlin
2024년 10월 7일구독자 전용

더 많은 면접 질문과 답변을 받아보려면 Dove Letter를 구독하세요.