서문 (Preface)
추천사 (Testimonial)
- Manuel Vivo (Staff Android Engineer at Bumble, 前 Google Android DevRel)
- Matt McKenna (Senior Android Engineer at Block, Android GDE)
- Alejandra Stamato (Lead Android Engineer at HubSpot, 前 Google Android DevRel)
- Simona Milanovic (Senior Android Developer Relations Engineer, Google Android DevRel)
이 책에 대하여
- To. 면접을 준비하시는 분들께 드리는 말
- To. 면접관 분들께 드리는 말
- 이슈 제보 및 토론
0. 안드로이드 면접 질문
- 카테고리 0: 안드로이드 프레임워크
- Q) 0. 안드로이드란 무엇인가요?
- Q) 1. 인텐트(Intent)란 무엇인가요?
- Q) 2. PendingIntent의 목적은 무엇인가요?
- Q) 3. Serializable과 Parcelable의 차이점은 무엇인가요?
- Q) 4. Context란 무엇이며 어떤 유형의 Context가 있나요?
- Q) 5. Application 클래스란 무엇인가요?
- Q) 6. AndroidManifest 파일의 목적은 무엇인가요?
- Q) 7. Activity 생명주기를 설명해주세요
- Q) 8. Fragment 생명주기를 설명해주세요
- Q) 9. Service란 무엇인가요?
- Q) 10. BroadcastReceiver란 무엇인가요?
- Q) 11. ContentProvider의 목적은 무엇이며, 애플리케이션 간의 안전한 데이터 공유를 어떻게 용이하게 하나요?
- Q) 12. 구성 변경(configuration changes)을 어떻게 처리하나요?
- Q) 13. 안드로이드는에서 메모리를 어떻게 효율적으로 관리하며, 메모리 누수(memory leaks)를 어떻게 방지하는지 설명해주세요.
- Q) 14. ANR 이란 무엇인지, ANR이 발생하는 주요 원인은 무엇이며, 어떻게 예방할 수 있는지 설명해주세요.
- Q) 15. 딥 링크(deep links)를 어떻게 처리하는지 설명해주세요.
- Q) 16. 태스크(tasks)와 백 스택(back stack)이란 무엇인가요?
- Q) 17. Bundle의 사용 목적에 대해서 설명해 주세요.
- Q) 18. Activity 또는 Fragment 간에 데이터를 어떻게 전달하나요?
- Q) 19. 화면 회전과 같은 구성 변경이 발생하면 Activity에 어떤 변화가 생기나요?
- Q) 20. ActivityManager란 무엇인가요?
- Q) 21. SparseArray를 사용하면 어떤 이점이 있나요?
- Q) 22. 런타임 권한(runtime permissions)을 어떻게 처리하나요?
- Q) 23. Looper, Handler, HandlerThread의 역할은 무엇인가요?
- Q) 24. 예외(exceptions)를 어떻게 추적하나요?
- Q) 25. 빌드 변형(build variants)과 플레이버(flavors)란 무엇인가요?
- Q) 26. 접근성(accessibility)을 어떻게 보장하나요?
- Q) 27. 안드로이드 파일 시스템이란 무엇인가요?
- Q) 28. 안드로이드 런타임(ART), Dalvik, Dex 컴파일러란 무엇인가요?
- Q) 29. APK 파일과 AAB 파일의 차이점은 무엇인가요?
- Q) 30. R8 최적화란 무엇인가요?
- Q) 31. 애플리케이션 용량를 어떻게 줄이나요?
- Q) 32. 안드로이드 애플리케이션의 프로세스(process)란 무엇이며, 안드로이드 운영 체제는 이를 어떻게 관리하나요?
- 카테고리 1: 안드로이드 UI - 뷰 (Views)
- Q) 33. View 생명주기를 설명해주세요
- Q) 34. View와 ViewGroup의 차이점은 무엇인가요?
- Q) 35. ViewStub이란 무엇이고, 이를 사용하여 UI 성능을 최적화해 본 경험이 있나요?
- Q) 36. 커스텀 뷰(custom views)는 어떻게 구현하나요?
- Q) 37. Canvas란 무엇이며 어떻게 활용하나요?
- Q) 38. View 시스템의 무효화(invalidation)란 무엇인가요?
- Q) 39. ConstraintLayout이란 무엇인가요?
- Q) 40. SurfaceView 대신 TextureView는 언제 사용해야 하나요?
- Q) 41. RecyclerView는 내부적으로 어떻게 작동하나요?
- Q) 42. Dp와 Sp의 차이점은 무엇인가요?
- Q) 43. 나인패치(nine-patch) 이미지의 용도는 무엇인가요?
- Q) 44. Drawable이란 무엇이며, UI 개발에서 어떻게 사용되나요?
- Q) 45. 안드로이드의 Bitmap이란 무엇이며, 큰 Bitmap을 효율적으로 처리하는 방법은 무엇인가요?
- Q) 46. 애니메이션을 어떻게 구현하나요?
- Q) 47. Window란 무엇인가요?
- Q) 48. 웹 페이지를 어떻게 렌더링하나요?
- 카테고리 2: Jetpack 라이브러리
- Q) 49. AppCompat 라이브러리란 무엇인가요?
- Q) 50. Material Design Components (MDC)란 무엇인가요?
- Q) 51. ViewBinding를 사용하면 어떤 장점이 있나요?
- Q) 52. DataBinding의 동작 원리에 대해서 설명해주세요.
- Q) 53. LiveData에 대해서 설명해 주세요.
- Q) 54. Jetpack ViewModel에 대해 설명해 주세요.
- Q) 55. Jetpack Navigation 라이브러리란 무엇인가요?
- Q) 56: Dagger 2와 Hilt의 동작원리 및 차이점에 대해서 설명해 주세요.
- Q) 57. Jetpack Paging 라이브러리는 어떤 메커니즘으로 동작하나요?
- Q) 58. Baseline Profile은 앱의 성능에 어떤 이점을 가져다주나요?
- 카테고리 3: 비즈니스 로직
- Q) 59. 장기적으로 실행되는 백그라운드 작업을 어떻게 관리하나요?
- Q) 60. Json 형식을 객체로 어떻게 직렬화(serialize)하나요?
- Q) 61. 원격 데이터를 가져오기 위해 네트워크 요청을 어떻게 처리하며, 효율성과 신뢰성을 위해 어떤 라이브러리나 기술을 사용하나요?
- Q) 62. 대규모 데이터 셋을 효율적으로 로드하는 데 왜 페이징 기법이 필요하고, RecyclerView로 구현해 본 경험이 있나요?
- Q) 63. 네트워크에서 이미지를 어떻게 가져오고 렌더링하나요?
- Q) 64. 로컬 디바이스에 데이터를 저장하고 복원하는 방법에 대해서 설명해 주세요.
- Q) 65. 오프라인 우선(offline-first) 아키텍처를 어떻게 설계하실 건가요?
- Q) 66. 초기 데이터 로딩을 위한 작업을 Compose의 LaunchedEffect와 ViewModel.init() 중 어디에서 하는 것이 가장 이상적인 가요?
1. Jetpack Compose 면접 질문
- 카테고리 0: Compose Fundamentals
- Q) 0. Jetpack Compose의 동작 구조는 어떻게 이루어져 있나요?
- Q) 1. Compose 페이즈(phase)에 대해 설명해 주세요,
- Q) 2. Jetpack Compose가 선언적(declarative) UI 프레임워크라고 불리는 이유는 무엇인가요?
- Q) 3. recomposition이란 무엇이며 언제 발생하나요? 또한 앱 성능과 어떤 관련이 있나요?
- Q) 4. Composable 함수는 내부적으로 어떻게 작동하나요?
- Q) 5. Jetpack Compose의 안정성(stability)이란 무엇이며, 성능과 어떤 관련이 있나요?
- Q) 6. 안정성(stabilities) 개선을 통해 Compose 성능을 최적화한 경험이 있나요?
- Q) 7. 컴포지션(composition)이란 무엇이며 어떻게 생성하나요?
- Q) 8. XML 기반 프로젝트를 Jetpack Compose로 마이그레이션하는 전략에 대해서 설명해 주세요.
- Q) 9. Compose 성능 테스트를 항상 릴리스 모드(release mode)에서 해야 하는 이유는 무엇인가요?
- Q) 10. Jetpack Compose에서 자주 사용하시는 Kotlin 관용구(idioms)에 대해서 말씀해 주세요.
- 카테고리 1: Compose Runtime
- Q) 11. 상태(State)란 무엇이며 이를 관리하는 데 사용되는 API는 무엇인가요?
- Q) 12. 상태 호이스팅(state hoisting)으로 어떤 이점을 얻을 수 있나요?
- Q) 13. remember와 rememberSaveable의 차이점은 무엇인가요?
- Q) 14. 컴포저블 함수 내에서 안전하게 코루틴 스코프(coroutine scope)를 생성하는 방법은 무엇인가요?
- Q) 15. 컴포저블 함수 내에서 발생하는 사이드 이펙트를 어떻게 처리하나요?
- Q) 16. rememberUpdatedState는 왜 사용하고 어떻게 작동하나요?
- Q) 17. produceState의 목적은 무엇이며 어떻게 작동하나요?
- Q) 18. snapshotFlow를 사용해 본 경험이 있을까요? 사용 시 주의 사항은 무엇인가요?
- Q) 19. derivedStateOf가 필요한 시나리오는 무엇이고, recomposition 최적화에 어떻게 도움이 되나요?
- Q) 20. 컴포저블 함수 또는 컴포지션의 생명주기는 어떻게 되나요?
- Q) 21. SaveableStateHolder에 대해서 설명해 주세요. 그리고 어떤 시나리오에서 유용한가요?
- Q) 22. 스냅샷 시스템(snapshot system)이란 무엇이며 어디에 사용하나요?
- Q) 23. State에 List 유형을 바로 넣어서 사용하면 어떤 문제가 발생하나요? mutableStateListOf와 mutableStateMapOf에 대해서 설명해 주세요.
- Q) 24. 컴포저블 함수에서 Kotlin의 Flow를 메모리 누수 없이 안전하게 관찰하는 방법은 무엇인가요?
- Q) 25. CompositionLocals의 역할과 목적에 대해 설명해 주세요.
- 카테고리 2: Compose UI
- Q) 26. Modifier란 무엇인가요?
- Q) 27. Layout이란 무엇인가요?
- Q) 28. Box에 대해서 아는 대로 다 설명해 주세요.
- Q) 29. Arrangement와 Alignment의 차이점에 대해서 설명해 주세요.
- Q) 30. Painter에 대해서 설명해 주세요.
- Q) 31. 네트 워크에서 받아오는 이미지는 어떻게 로딩하나요?
- Q) 32. UI 버벅거림(jank)을 피하면서 리스트에 수백 개의 항목을 효율적으로 렌더링하려면 어떻게 해야 하나요?
- Q) 33. Lazy List를 활용하여 페이지네이션(pagination) 구현하는 방법을 설명해 주세요.
- Q) 34. Canvas는 어떤 역할을 하나요?
- Q) 35. graphicsLayer를 어떻게 활용하나요?
- Q) 36. Jetpack Compose에서 애니메이션을 어떻게 구현하나요?
- Q) 37. 화면 간 내비게이션을 어떻게 구현하나요?
- Q) 38. Compose Preview는 어떻게 작동하고 사용하고 계신 Preview 어노테이션은 어떤 것이 있나요?
- Q) 39. Compose UI 컴포넌트 또는 스크린 유닛 테스트를 작성해 본 적이 있나요? 어떤 시나리오에서 작성해 봤나요?
- Q) 40. 스크린샷 테스트(screenshot testing)란 무엇이며, UI 일관성을 보장하는 데 어떻게 도움이 되나요?
- Q) 41. Jetpack Compose에서 접근성을 어떻게 보장하나요?






