왜 이렇게 공부했나
이 자료는 "안드로이드 일반론만 먼저 파는 방식"보다,
zipkr라는 실제 앱을 기준으로 앱 진입점부터 화면 상태, 데이터 계층,
의존성 주입, 상세 기능, 빌드/운영까지 한 번에 연결해서 이해하는 쪽이 더 효율적이라고 보고 만들었습니다.
목표는 "동작한다"가 아니라 "왜 이렇게 짰는지 설명할 수 있다"까지 가는 것입니다.
출발점
AndroidManifest.xml부터 시작해서 OS가 앱을 어떻게 띄우는지 먼저 잡습니다.
중간 축
Compose 화면, ViewModel 상태, Repository 경계를 따라 데이터가 흘러가는 방향을 봅니다.
마지막 축
Hilt, WebView, 딥링크, 빌드, 운영, 테스트까지 가며 실제 앱 완성도를 공부합니다.
이 자료가 필요한 사람
Manifest, Application, Activity, Compose, ViewModel, Hilt 같은 용어가 한 앱 안에서 어떻게 연결되는지 보고 싶은 경우에 맞습니다.
왜 UI는 상태만 그리고, 왜 Repository가 필요하고, 왜 BuildConfig로 키를 주입하는지까지 설명할 수 있게 돕는 자료입니다.
무엇이 들어 있나
공개용으로는 compact 통합 PDF를 중심에 두고, 내부적으로는 phase별 워크북을 묶어 만들었습니다. 내용은 아래 흐름으로 이어집니다.
| 구성 | 핵심 내용 |
|---|---|
| 앱 진입점 | AndroidManifest.xml, ZipkrApp.kt, MainActivity.kt |
| Compose 화면 | SearchScreen.kt, 상태 보존, side effect, 재구성 |
| 상태 관리 | SearchViewModel, DetailViewModel, StateFlow, debounce |
| 도메인/데이터 | Address, Coordinate, Result, AppError, Repository |
| 네트워크/DI | Retrofit, OkHttp, Serialization, Hilt, @Binds, @Provides |
| 상세 기능/운영 | Bottom sheet, WebView, 지도 딥링크, 빌드, signing, R8, 테스트 |
10개 Phase로 쪼갠 이유
Manifest, Application, Activity, theme, intent-filter를 잡습니다.
@Composable, remember, Modifier, 재사용 컴포넌트를 이해합니다.
StateFlow, debounce, viewModelScope, 상태 머신 관점을 익힙니다.
앱 내부 언어와 외부 DTO를 분리하는 이유를 배웁니다.
UI가 저장소/네트워크 구현을 몰라도 되게 만드는 경계를 봅니다.
Retrofit, OkHttp, converter, API 키 주입을 이해합니다.
@Inject, @Binds, @Provides, qualifier를 코드로 연결합니다.
Bottom sheet, WebView, 딥링크, copy UX, micro animation을 이해합니다.
Gradle, version catalog, signing, BuildConfig, release 최적화를 공부합니다.
ViewModel, Repository, util 테스트가 무엇을 보호하는지 봅니다.
추천 공부 순서
- 앱 아이콘을 눌렀을 때 무엇이 실행되는지부터 먼저 설명해봅니다.
- 그다음
SearchScreen과SearchViewModel을 같이 읽습니다. - 모델, Repository, Provider, NetworkModule로 내려가며 데이터 경계를 봅니다.
- 마지막에 Hilt, WebView, 빌드/운영, 테스트로 확장합니다.
모든 파일을 "역할, 위치 이유, 네이밍, 줄 단위 해설, 기본 개념 연결, 빠지면 깨지는 것" 순서로 설명할 수 있는 상태를 목표로 잡습니다.
다운로드
공개용으로 정리한 가장 압축된 버전은 아래 compact PDF입니다. 기존 122페이지 통합본을 다시 조정해 51페이지로 줄였습니다.