모바일 개발 · 심화
복잡한 Custom View를 설계할 때, onMeasure, onLayout, onDraw 메서드 내에서 발생할 수 있는 성능 병목 현상과 이를 해결하기 위한 전략들을 설명하고, 복잡한 레이아웃을 효율적으로 처리하기 위한 접근 방식을 제시해 보세요.
힌트 · 불필요한 객체 생성 최소화, 캐싱, 하드웨어 가속 활용, `invalidate()`/`requestLayout()` 호출 최소화, ViewStub, Merge 태그 등을 고려합니다.
invalidate()requestLayout()캐싱View.LAYER_TYPE_HARDWAREMeasureSpec
모범답안
복잡한 Custom View 성능 병목은 주로 onMeasure, onLayout, onDraw에서 발생합니다. onMeasure에서는 MeasureSpec을 잘못 다루거나, 불필요한 크기 계산 반복이 문제가 될 수 있습니다. onLayout에서는 잦은 레이아웃 변경, onDraw에서는 과도한 객체 생성이나 복잡한 연산이 성능 저하를 일으키죠.
해결 전략으로는, 먼저 객체 생성을 최소화하고, 계산 결과를 캐싱하여 재사용합니다. 하드웨어 가속을 활성화하고, invalidate()나 requestLayout() 호출을 최대한 줄여야 합니다. 뷰의 복잡성을 줄이기 위해 ViewStub이나 Merge 태그를 활용하는 것도 좋은 방법입니다.
복잡한 레이아웃을 효율적으로 처리하려면, ConstraintLayout을 사용하여 레이아웃 계산 비용을 줄이거나, Custom View 내에서 필요한 부분만 그리도록 최적화하는 것이 중요합니다. 필요하다면 View.LAYER_TYPE_HARDWARE를 사용하여 렌더링 성능을 향상시킬 수도 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 Android / Kotlin 면접 질문
- 코루틴의 Dispatchers 종류와 각 Dispatcher의 역할에 대해 설명하고, CoroutineScope를 올바르게 사용하여 메모리 누수를 방지하고 코루틴 생명주기를 관리하는 방법에 대해 구체적인 예시와 함께 설명해 주세요.
- Dagger 또는 Hilt에서 컴포넌트(Component)의 계층 구조가 필요한 이유와 이를 어떻게 설계하고 사용하는지 설명하고, 특정 스코프(예: @Singleton, @ActivityScoped)가 컴포넌트 계층 구조와 어떤 관계를 가지는지 설명해 보세요.
- 안드로이드 앱의 콜드 스타트(Cold Start) 프로세스를 설명하고, 콜드 스타임(Cold Start Time)을 효과적으로 줄이기 위한 구체적인 최적화 방안들을 제시해 보세요.