Jetpack Compose Internals 한국어 번역
Jetpack Compose Internals 한국어 번역
책에 대해
이 책은 Google과 Android 팀이 새롭게 출시한 Jetpack Compose의 내부 구현과 동작원리를 탐구합니다. Jetpack Compose는 Android UI의 미래입니다. 여러분들이 Jetpack Compose의 내부 구조를 심층적으로 학습하신다면, 미래에 모던하고 효율적인 Android 앱을 개발하기 위한 견고한 기술력을 습득하실 수 있습니다.
Jetpack Compose Ineternals는 Android 뿐만 아니라, Jetpack Compose의 다른 사용 사례도 다루고 있습니다. 또한, Compose의 컴파일러와 런타임을 일반적인 관점에서 탐구하는 데 중점을 두고 있기 때문에, 전반적인 경험이 목표로 하시는 플랫폼에 대해 매우 독립적입니다. 추가적으로, Jetpack Compose의 다양한 사용 사례에 전념하는 챕터를 별도로 제공하며, 샘플 코드를 통해 몇 가지 흥미로운 사례들을 소개합니다.
Jetpack Compose 및 Android는 Google LLC의 상표이며, 이 책은 Google의 승인을 받거나 제휴하지 않습니다.
Jetpack Compose Internals 국문 번역 프로젝트 🇰🇷
Jetpack Compose가 공식 출시된 2021년 7월, Jorge Castillo는 Jetpack Compose의 내부 구현과 동작원리에 대해 정리한 Jetpack Compose Internals를 공개했습니다.
저자가 밝힌 이 책의 목표와 제작 동기는 다음과 같습니다.
“이 책의 목표는 Compose의 원리에 대한 지식 격차를 메우는 것이었다. 나는 Android 개발자로 일하는 동안 소스를 읽고 내부 동작 구조를 이해하는 것이 지식 수준에서 큰 도약을 의미한다는 것을 깨달았고, Jetpack Compose Internals를 작성하기로 결심했다.”
새로운 기술에 대한 자료가 절대적으로 부족한 상황에서 Jetpack Compose Internals는 전세계 안드로이드 개발자들의 큰 호응을 얻었습니다. 저자의 직강으로 8주간 진행되는 학습 과정은 저렴하지 않은 가격임에도 매번 자리가 가득차고 있습니다.
구글이 Jetpack Compose 1.0 stable을 출시한지 약 2년 반이 지난 이후, 현재 Google Play에 출시된 앱 중 12만 5천개 이상의 앱이 Jetpack Compose로 개발되었습니다. 여전히 XML로 작성 중인 앱의 비중이 더 많지만 Jetpack Compose는 높은 이식성을 가진 라이브러리라는 특성으로 인해 많은 앱들에 점진적으로 적용되기 시작하였고, 현재는 구글 다양한 앱들을 포함하여 Airbnb, Lyft, Reddit, Twitter, Disney, Block, Grab 등 세계적인 제품 개발에 활용되고 있습니다.
Jetpack Compose Ineternals는 Jetpack Compose의 내부 구현과 동작원리를 학습하는 것에 목표를 두고 있습니다. 따라서, 우리가 흔히 다루는 Jetpack Compose의 일부를 담당하는 Compose UI 라이브러리의 컴포넌트 활용 방법에 대하여는 구체적으로 다루지 않습니다. 이에 관련하여 선행학습이 필요한 분은 Jetpack Compose 공식 홈페이지를 참조하시길 바랍니다.
국내의 개발자들 또한 이 책을 구매하여 읽고 공부하는 모습을 여럿 볼 수 있었는데, 쉽지 않은 난이도와 영어라는 언어적 장벽으로 인해 내용을 이해하는 데 많은 어려움을 표하였습니다. 이에 우리는 이 책을 번역하여 누구나 쉽고 정확하게 Jetpack Compose의 내부 구현과 동작원리 대해 학습할 수 있도록 하는데 뜻을 모았습니다.
— 엄재웅, 류기민 드림
이 책의 추천사
강사룡 (Google, Developer Relations Engineer)
이 책은 Compose를 적절하게 이용하기 위한 핵심적인 내용을 담고 있기 때문에, 저희 회사도 일부 부서에서는 신입 엔지니어들을 위한 교과서로 사용하고 있습니다. 다만, 내용이 난해할 뿐 아니라, 원저자가 영어 원어민이 아닌 관계로 반복되는 표현 실수와, 미국인들도 세네 번 읽기 전에는 의미를 이해하기 어려운 문단 구조로 인해 완독하기 매우 어려웠던 것이 사실이었습니다. 이를 세계적 수준의 한국인 Compose 개발자 두 분이 미려한 한국어로 번역했을 뿐 아니라 주석을 곁들여 보다 쉽게 읽을 수 있게 된 것은 한국 개발자 생태계에 정말 좋은 소식이라고 생각합니다.
여러분도 이 책을 꼭 읽고 Composable 함수와 내부 상태가 어떻게 해석되어 메모리에 적재되는지, 실제 환경에서 어떤 매커니즘으로 실행되는지, 그래서 어떻게 하면 더 효율적으로 UI 로직을 구현할 수 있는 지를 이해하기 위한 중요한 지식을 얻길 강력히 권장합니다. 또한 이 책은 Compose Internal에 대한 정보를 총망라하고 있기 때문에, 이 책을 중심으로 하면 각 개념들과 연관된 Compose 공식 문서와 여러 블로그 글들을 탐색해나가는 형태로 지식을 잘 확장해나갈 수 있을 것입니다.
아무쪼록 이 책을 통해 여러분들도 Compose 중급 이상으로 올라가기 위해 반드시 알아야 할 내용들을 습득하고, 이를 토대로 보다 깊이 있는 경험을 쌓아 세계적인 수준의 엔지니어로 발돋움할 수 있길 바랍니다.
노현석 (카카오뱅크, Android Developer, Android GDE)
Android 개발자가 Compose를 통해서 UI를 손쉽게 작업할 수 있는 것은 큰 장점입니다. 그렇기에 이 기술을 뒷받침하는 내부 동작과 기술의 이해가 필요합니다. Compose가 좋다고 단순하게 받아들이기보다는 이해와 학습한 후 판단해야 합니다. 바로 이 책이 그 부분을 해소할 수 있는 실마리를 제공할 것입니다.
Compose는 세상에 나온 지 얼마 안 된 UI 툴킷이므로 초보자부터 숙련된 개발자 모두가 같은 입장입니다. 어려운 이해보다는 새로운 도전이라는 희망으로 Compose와 함께하시길 바랍니다.
안성용 (네이버 웹툰, Android Developer, Android GDE)
Compose는 Android에서의 UI 개발 방법을 크게 개선하는 것을 넘어서 멀티플랫폼 지원까지 나아가고 있는, 많은 가능성을 갖고 있는 도구입니다. Jetpack Compose를 다년간 접하여, 이제는 단순히 사용하는 단계에서 Next Level로 나아가고픈 분들께 가장 추천하고 싶습니다. 그리고 낮은 숙련도와 막연한 우려로 아직 현업에서 사용하지 않는 분들도 있을 거라 짐작하는데요. 이 책을 통해, Compose를 한층 더 깊게 파악하여 프로젝트 적용에 대한 확신을 얻어 가시길 바랍니다.
김준비 (당근마켓, Android Developer)
그동안 힘들게 영어로 봤어야 했는데, 번역본이 출시 되다니 국내 안드로이드 엔지니어들에게는 큰 희소식입니다! 안드로이드 공식 문서가 교과서라면, Jetpack Compose Internals 는 마치 수학의 정석 같은 책입니다. 컴포즈를 이해하기 위한 용어, 설계, 동작 원리 등 알찬 내용으로 구성되어 있으며, 친절한 역자 주를 통해 초급자도 충분히 읽어볼 수 있게 되었습니다. 이 책은 컴포즈에 관심이 있는 모든 안드로이드 엔지니어에게 강력 추천합니다.
김수현 (우아한형제들, Android Developer/Educator, GDG Android Organizer)
엄재웅님과 류기민님은 Jetpack Compose에 대한 다양한 경험을 보유하고 있으며, 전문적이고 명확한 설명으로 독자들을 안내하십니다. 번역서는 원서의 맥락을 그대로 유지하면서도 한국 개발자들이 더 잘 이해할 수 있도록 다양한 해설과 각주가 추가되어 있습니다. Jetpack Compose를 활용한 다양한 사용 사례뿐만 아니라 내부 구조에 대해 이해하고자 하는 딥 다이버(Deep diver)에게 강력히 추천합니다.
권태환 (퍼핀, Android Developer, GDG Android Organizer)
2020년 첫 소개 이후 Jetpack Compose 정식버전 1.5, 다음 배포 예정인 1.6 버전까지 지속적으로 최적화 및 안정화 새로운 기능을 늘려가고 있습니다. 개인적으로도 1.0 이전부터 사용해오고 있지만 한글 입력 부분을 제외한 큰 문제를 발견하지 못하였습니다. 기존 XML에서의 커스텀 View 작업 대신 코틀린 함수를 확장하는 형태로 컴포즈는 함수만 다룰줄 안다면 누구나 확장하고, 유지보수 할 수 있는 선언형 UI를 사용해볼 수 있습니다. 이 책을 통해 컴포즈의 입문부터 내부 동작에 대한 이해를 높여 볼 수 있는 좋은 책이라 생각됩니다.
FAQ
Q. 구매를 했는데 내용이 빠져있는 것 같습니다.
A. LeanPub을 통해 각 장의 번역 작업이 완료될 때마다 새로운 버전에 대한 알림을 받아보실 수 있습니다. 24년 1월 기준, 1장까지 번역이 완료되었습니다.
Q. 번역 완료 예정일은 어떻게 되나요?
A. 24년 1분기 말~2분기 초 완성을 목표로 하고 있습니다.
Q. 전자책? 종이책? 번역본의 형태가 궁금합니다.
A. LeanPub을 통해 구매 시 기입한 이메일로 전자책(pdf, epub)을 다운 받으실 수 있는 메일이 전송됩니다. 종이책의 경우 수요가 있다고 판단되면 제작을 진행 해보려 합니다.
Q. 업데이트 되는 내용을 받아보려면 추가로 결제가 필요한가요?
A. 책 내용이 원서의 업데이트에 따라서 함께 업데이트될 여지가 있습니다. 업데이트되는 내용은 추가 결제 없이 LeanPub을 통해 구매자에게 제공될 예정입니다.
Team Discounts
Get a team discount on this book!
이 책은 다음 패키지로도 제공됩니다:
목차
- 작가의 말
- 기술 번역팀 엄재웅, 류기민이 독자들에게 전하는 말
- 원저자 (Jorge Castillo)가 독자들에게 전하는 말
- 이 책의 추천사
- 서막 (Prelude)
- 이 책을 읽어야하는 이유 (Why to read this book)
- 이 책에서 다루지 않는 내용 (What this book is not about)
- 왜 Compose 내부에 대한 내용을 다루는지 (Why to write about internals)
- 소스 코드를 가까이 두세요 (Keep the sources close)
- 코드 예제 (Code snippets and examples)
- 1. Composable 함수들 (Composable functions)
- Composable 함수의 의미 (The meaning of Composable functions)
- Composable 함수의 속성 (Properties of Composable functions)
- 호출 컨텍스트 (Calling context)
- 멱등성 (Idempotent)
- 통제되지 않은 사이드 이펙트 방지 (Free of uncontrolled side effects)
- 재시작 가능 (Restartable)
- 빠른 실행 (Fast execution)
- 위치 기억법 (Positional memoization)
- Suspend 함수와의 유사성 (Similarities with suspend functions)
- Composable 함수의 색깔 (The color of Composable functions)
- Composable 함수 타입 (Composable function types)
- 2. Compose 컴파일러 (The Compose compiler)
- Compose 컴파일러 (The Compose compiler)
- Compose 어노테이션들 (Compose annotations)
- @Composable
- @ComposableCompilerApi
- @InternalComposeApi
- @DisallowComposableCalls
- @ReadOnlyComposable
- @NonRestartableComposable
- @StableMarker
- @Immutable
- @Stable
- 컴파일러 확장 등록 (Registering Compiler extensions)
- Kotlin 컴파일러 버전 (Kotlin Compiler version)
- 정적 분석 (Static analysis)
- 정적 검사기 (Static Checkers)
- 호출 검사 (Call checks)
- 타입 검사 (Type checks)
- 선언 검사 (Declaration checks)
- 진단 제지기 (Diagnostic suppression)
- 런타임 버전 검사 (Runtime version check)
- 코드 생성 (Code generation)
- 코틀린 IR (The Kotlin IR)
- 낮추기 (Lowering)
- 클래스 안정성 추론 (Inferring class stability)
- 라이브 리터럴 활성화 (Enabling live literals)
- Compose 람다식 기억법 (Compose lambda memoization)
- Composer 주입하기 (Injecting the Composer)
- 비교 전파 (Comparison propagation)
- 디폴트 매개변수 (Default parameters)
- 컨트롤 플로우 그룹 생성 (Control flow group generation)
- Klib과 미끼 생성 (Klib and decoy generation)
- 3. 컴포즈 런타임 (The Compose runtime)
- 슬롯 테이블 및 변경 목록 (The slot table and the list of changes)
- 슬롯 테이블 심층 분석 (The slot table in depth)
- 변경 목록 (The list of changes)
- Composer (The Composer)
- Composer 키우기 (Feeding the Composer)
- 변경 사항 모델링 (Modeling the Changes)
- 작성 시기 최적화 (Optimizing when to write)
- 쓰기 및 읽기 그룹 (Writing and reading groups)
- 값 기억하기 (Remembering values)
- 재구성 범위 (Recompose scopes)
- Composer와 사이드 이펙트 (SideEffects in the Composer)
- CompositionLocals 저장 (Storing CompositionLocals)
- 소스 정보 저장 (Storing source information)
- CompositionContext를 이용한 Composition 연결 (Linking Compositions via CompositionContext)
- 현재 상태 스냅샷에 접근 (Accessing the current State snapshot)
- 노드 탐색 (Navigating the nodes)
- 구독자와 작성자의 동기화 유지 (Keeping reader and writer in sync)
- 변경 사항 적용하기 (Applying the changes)
- 노드 트리 구축 시 성능 (Performance when building the node tree)
- 변경 사항이 적용되는 방식 (How changes are applied)
- 노드 연결 및 그리기 (Attaching and drawing the nodes)
- Composition (Composition)
- Composition 생성하기 (Creating a Composition)
- 초기 Composition 과정 (The initial Composition process)
- 초기 Composition 후 변경 사항 적용 (Applying changes after initial Composition)
- Composition에 대한 추가 정보 (Additional information about the Composition)
- Recomposer (The Recomposer)
- Recomposer 생성 (Spawning the Recomposer)
- Recomposition 프로세스 (Recomposition process)
- Recomposition의 동시성 (Concurrent recomposition)
- Recomposer의 상태 (Recomposer states)
- 4. Compose UI
- Compose UI와 런타임의 통합 (Integrating UI with the Compose runtime)
- 예약된 변경 목록을 실제 트리의 변경 목록으로 매핑 (Mapping scheduled changes to actual changes to the tree)
- Compose UI 관점에서의 Composition (Composition from the point of view of Compose UI)
- Compose UI 관점에서의 Subcomposition (Subcomposition from the point of view of Compose UI)
- UI에 변경사항 반영하기 (Reflecting changes in the UI)
- 다양한 타입의 Applier들 (Different types of Appliers)
- 새로운 LayoutNode를 구체화 하기(Materializing a new LayoutNode)
- 전체 과정의 마무리 (Closing the circle)
- 노드 제거를 위한 변경 사항 구체화 (Materializing a change to remove nodes)
- 노드 이동을 위한 변경 사항 구체화 (Materializing a change to move nodes)
- 모든 노드를 지우는 변경 사항 구체화 (Materializing a change to clear all the nodes)
- Compose UI에서의 측정 (Measuring in Compose UI)
- 측정 정책 (Measuring policies)
- 고유 크기 측정 (Intrinsic measurements)
- 레이아웃 제약 조건 (Layout Constraints)
- LookaheadLayout
- Modifier 체인 모델링 (Modeling modifier chains)
- LayoutNode에 modifier 설정 (Setting modifiers to the LayoutNode)
- LayoutNode가 새로운 modifier를 받아 들이는 방법 (How LayoutNode ingests new modifiers)
- 노드 트리 그리기 (Drawing the node tree)
- Jetpack Compose에서의 Semantics (Semantics in Jetpack Compose)
- semantics 변화에 대한 알림 (Notifying about semantic changes)
- 병합된/병합되지 않은 semantic 트리 (Merged and unmerged semantic trees)
- 5. 상태 스냅샷 시스템 (State snapshot system)
- 스냅샷 상태란 (What snapshot state is)
- 동시성 제어 시스템 (Concurrency control systems)
- 다중 버전 동시성 제어 (MCC or MVCC) (Multiversion concurrency control (MCC or MVCC))
- 스냅샷 (The Snapshot)
- 스냅샷 트리 (The snapshot tree)
- 스냅샷과 쓰레딩 (Snapshots and threading)
- 읽고 쓰기 관찰하기 (Observing reads and writes)
- 가변적인 스냅샷 (MutableSnapshots)
- 글로벌 스냅샷과 중첩된 스냅샷 (GlobalSnapshot and nested snapshots)
- 상태 객체 및 상태 기록 (StateObjects and StateRecords)
- 읽기와 쓰기 상태 (Reading and writing state)
- 오래된 기록 제거 또는 재사용하기 (Removing or reusing obsolete records)
- 변경 사항 전파하기 (Change propagation)
- 쓰기 충돌 병합하기 (Merging write conflicts)
- 6. 이펙트 및 이펙트 핸들러 (Effects and effect handlers)
- 사이드 이펙트 소개 (Introducing side effects)
- Compose에서의 사이드 이펙트 (Side effects in Compose)
- 우리가 필요로 하는 것 (What we need)
- 이펙트 핸들러의 종류 (Effect Handlers)
- 비일시 중단 이펙트 (Non suspended effects)
- 일시 중단 이펙트 (Suspended effects)
- 서드 파티 라이브러리 어댑터 (Third party library adapters)
- 7. Compose Runtime 고급 사용 사례 (Advanced Compose Runtime use cases)
- Compose Runtime vs Compose UI
- Composition 재소개 ((Re-) Introducing composition)
- 벡터 그래픽의 구성 (Composition of vector graphics)
- 벡터 이미지 트리 구축 (Building vector image tree)
- Compose UI에 벡터 composition 통합하기 (Integrating vector composition into Compose UI)
- Compose를 이용한 DOM 관리 (Managing DOM with Compose)
- 브라우저에서의 독립 구성 (Standalone composition in the browser)
- 결론 (Conclusion)
- 작가의 말
Leanpub의 60일 간 100%만족 보장
구매일로부터 60일안에 어떤 결제든 클릭 두번으로 전액 환불을 받을 수 있습니다.
전체 약관 확인하기
10달러 구매 시 8달러, 20달러 구매 시 16달러를 벌 수 있습니다
우리는 7.99달러 이상 구매에 대해 80% 로열티를 지급하고, 0.99달러에서 7.98달러 사이의 구매에 대해 80% 로열티에서 50센트의 고정 수수료를 뺀 금액을 지급합니다. 10달러 판매 시 8달러, 20달러 판매 시 16달러를 벌 수 있습니다. 따라서 20달러에 책을 5000권 판매하고 환불되지 않았다면, 80,000달러를 벌 수 있습니다.
(네, 이미 Leanpub에서 그보다 훨씬 더 많이 번 작가도 있습니다.)
실제로 작가들은 Leanpub에서1300만 달러 이상을 벌어들였습니다. 작성, 출판 및 판매를 통해.
Leanpub에서 작성에 대해 자세히 알아보세요
무료 업데이트. DRM(디지털 저작권 관리)는 없습니다.
당신이 Leanpub의 책을 산다면, 작가가 책을 업데이트 하는 한 책에 대한 무료 업데이트를 받을 수 있습니다! 많은 작가들은 Leanpub을 작성 중인 책을 출판하기 위해 이용합니다. 모든 독자들은 책을 언제 구매하건, 얼마나 지불하였건(무료 구매도 포합됩니다) 관계없이 무료 업데이트를 받습니다.
대부분의 Leanpub에 있는 책들은 PDF(컴퓨터용), EPUB(핸드폰과 태블릿용) 그리고 MOBI(킨들용)으로 제공됩니다. 책이 지원하는 포맷은 이 페이지 우측 상단에서 확인 할 수 있습니다.
Leanpub의 책은 DRM 사본 보호 장치를 드디어 없앴습니다, 그래서 지원가능한 어떤 기기로든 쉽게 구매하신 책들을 읽을 수 있습니다.