Android 16 완전 분석: 새로운 API, 데스크톱 모드, 면접 질문 가이드【2026년판】

Android 16(API 36) 상세 분석. 데스크톱 모드, ProgressStyle 알림, Predictive Back 내비게이션, Edge-to-Edge 강제 적용 등 면접에서 다루는 주제를 총망라합니다.

Android 16 새로운 API, 데스크톱 모드, 면접 대비 가이드

Android 16(API 레벨 36, 코드명 "Baklava")은 Android 12의 Material You 이후 가장 영향력 있는 플랫폼 업데이트입니다. 2025년 6월 10일에 안정 버전으로 출시되었으며, 2026년 9월 기준 활성 기기의 21% 이상에서 실행되어 가장 널리 배포된 Android 버전 중 하나입니다. Android 개발자 면접을 준비하는 경우, 이러한 API 변경 사항을 이해하는 것은 필수입니다.

면접 핵심 포인트

Android 16은 API 36을 타겟팅하는 앱에 세 가지 주요 변경 사항을 적용합니다: Edge-to-Edge 렌더링 필수화, 대형 화면(600dp 이상)에서 방향/리사이즈 제한 무시, Predictive Back 내비게이션의 올바른 처리. 모든 Android 면접에서 이 중 하나 이상은 반드시 다루어집니다.

SDK 릴리스 모델과 메이저-마이너 전략

Android 16은 기능 도입 계획에 영향을 미치는 듀얼 릴리스 구조를 도입했습니다. 메이저 SDK는 2025년 3월 Beta 3와 함께 출시되어 동작 변경과 핵심 API가 확정되었습니다. 두 번째 마이너 SDK는 2025년 12월 2일에 출시되어 플랫폼 동작을 변경하지 않고 새로운 API를 추가했습니다.

이러한 분리는 면접에서 중요합니다: 메이저 릴리스에는 호환성을 깨는 변경 사항(Edge-to-Edge, 방향 강제 적용)이 포함되고, 마이너 릴리스는 기존 앱 동작에 영향을 주지 않으면서 새로운 기능(추가 Jetpack 라이브러리, AI 관련 API)을 제공합니다. Google은 엔터프라이즈 팀에게 안정적이고 예측 가능한 연간 규정 준수 목표를 제공하면서 API 제공을 가속화하기 위해 이 모델을 설계했습니다.

면접에서 자주 나오는 질문은 이 듀얼 모델에서 targetSdkVersion과 compileSdkVersion의 관계입니다. 정답: targetSdkVersion = 36은 메이저 릴리스의 모든 동작 변경을 트리거합니다. 마이너 SDK는 추가만 하며, 옵트인이나 타겟 업데이트가 필요하지 않습니다.

API 36에서 Edge-to-Edge 강제 적용

Android 16을 타겟팅하는 앱은 더 이상 Edge-to-Edge 레이아웃을 옵트아웃할 수 없습니다. 시스템은 setDecorFitsSystemWindows(true) 호출과 레거시 SystemUI 가시성 플래그를 무시합니다. 모든 앱은 윈도우 인셋을 올바르게 처리해야 하며, 그렇지 않으면 UI 요소가 상태 바와 내비게이션 바 뒤에 숨겨질 위험이 있습니다.

MainActivity.ktkotlin
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // enableEdgeToEdge() is now the default on API 36+
        // No opt-out available
        enableEdgeToEdge()
        setContent {
            Scaffold(
                modifier = Modifier.fillMaxSize()
            ) { innerPadding ->
                // innerPadding accounts for system bars
                MainContent(
                    modifier = Modifier.padding(innerPadding)
                )
            }
        }
    }
}

Jetpack Compose의 Scaffold 컴포저블은 innerPadding을 통해 인셋을 자동으로 처리합니다. View 기반 앱의 경우 ViewCompat.setOnApplyWindowInsetsListener가 여전히 권장되는 접근 방식입니다. 핵심 사항: WindowInsetsCompat.Type.systemBars()를 명시적으로 소비해야 하며, 그렇지 않으면 시스템이 앱 디자인과 맞지 않을 수 있는 기본 패딩을 적용합니다.

면접관들은 XML 레이아웃에서 android:fitsSystemWindows="true"에 의존했던 앱이 어떻게 되는지 자주 질문합니다. API 36에서 이 속성은 여전히 작동하지만 시스템 바에 대한 패딩만 적용하며, 앱이 Edge-to-Edge로 그리는 것을 막지는 않습니다.

적응형 앱과 대형 화면 방향 변경

Android 16은 smallestWidth >= 600dp 디스플레이에서 게임이 아닌 앱의 android:screenOrientation과 android:resizeableActivity="false"를 무시합니다. 태블릿, 폴더블, 데스크톱 모드로 연결된 외부 모니터가 모두 해당됩니다. 이로써 대형 화면에서 레터박스로 표시되던 폰 레이아웃 시대가 끝납니다.

kotlin
// Responsive layout using WindowSizeClass
@Composable
fun AdaptiveLayout() {
    val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass
    when {
        windowSizeClass.windowWidthSizeClass == 
            WindowWidthSizeClass.EXPANDED -> {
            // Two-pane layout for tablets/desktop
            TwoPaneLayout()
        }
        windowSizeClass.windowWidthSizeClass == 
            WindowWidthSizeClass.MEDIUM -> {
            // Adapted layout for foldables
            MediumLayout()
        }
        else -> {
            // Phone layout
            CompactLayout()
        }
    }
}

Jetpack WindowManager 라이브러리는 반응형 디자인을 위한 WindowSizeClass를 제공합니다. API 36을 타겟팅하는 앱 전용 옵트아웃 속성이 있었지만, Android 17(API 37, 2026년 6월 16일 출시)에서 이 옵트아웃이 완전히 제거되었습니다. API 37을 타겟팅하는 앱은 대형 화면에서 방향을 제한할 수 없습니다.

Android 17에서 옵트아웃 제거

방향 제한을 위한 API 36 옵트아웃에 의존하는 앱은 API 37을 타겟팅하기 전에 반응형 레이아웃으로 마이그레이션해야 합니다. Android 17의 필수 리사이즈 적용은 600dp 이상 화면의 모든 비게임 앱에 적용됩니다.

면접관들은 종종 "세로 방향으로 고정된 앱을 대형 화면을 지원하도록 마이그레이션하는 방법은?"이라고 질문합니다. 답변에는 고정 방향을 반응형 레이아웃으로 교체, 구성 변경(특히 onConfigurationChanged) 테스트, 저장된 상태가 화면 크기 전환 후에도 유지되는지 확인하는 것이 포함됩니다.

데스크톱 모드와 연결된 디스플레이

데스크톱 모드는 Android 16 QPR3(2026년 3월 Pixel Drop)에서 정식 출시 기능으로 제공되며, Pixel 8 이상 및 Samsung Galaxy S26/Fold7/Flip7 기기를 지원합니다. USB-C를 통해 휴대폰을 외부 모니터에 연결하면 작업 표시줄, 크기 조절 가능한 창, 여러 가상 데스크톱, 완전한 키보드/마우스 지원을 갖춘 독립적인 데스크톱 세션이 시작됩니다.

LaunchOnExternalDisplay.ktkotlin
fun launchOnExternalDisplay(context: Context) {
    val displayManager = context.getSystemService(
        Context.DISPLAY_SERVICE
    ) as DisplayManager
    // Find external displays
    val externalDisplays = displayManager.displays.filter {
        it.displayId != Display.DEFAULT_DISPLAY
    }
    if (externalDisplays.isNotEmpty()) {
        val options = ActivityOptions.makeBasic().apply {
            launchDisplayId = externalDisplays.first().displayId
        }
        context.startActivity(
            Intent(context, DesktopActivity::class.java),
            options.toBundle()
        )
    }
}

휴대폰과 외부 디스플레이는 독립적으로 작동합니다. 앱은 실행 중인 디스플레이에 종속됩니다. Google과 Samsung은 데스크톱 윈도잉 경험에서 협력하여 통합된 개발자 타겟을 만들었습니다. Samsung DeX는 동일한 플랫폼 API를 통합합니다.

데스크톱 모드에서 개발자가 고려해야 할 주요 사항:

  • 윈도우 메트릭은 동적으로 변합니다. Display 객체를 캐시하지 마세요. 모든 구성 변경에서 WindowMetricsCalculator 또는 Compose LocalConfiguration을 쿼리하세요.
  • 키보드와 마우스 지원. 데스크톱 세션에서는 외부 주변 기기가 표준입니다. KeyEvent 디스패칭과 포인터 호버 상태를 처리하세요.
  • 멀티 인스턴스 지원. 데스크톱 사용자는 동일한 앱의 여러 창을 기대합니다. android:documentLaunchMode="intoExisting"을 선언하거나 FLAG_ACTIVITY_NEW_DOCUMENT를 적절히 처리하세요.

Android 면접 준비가 되셨나요?

인터랙티브 시뮬레이터, flashcards, 기술 테스트로 연습하세요.

ProgressStyle 알림과 실시간 업데이트

Android 16은 Notification.ProgressStyle을 도입했습니다. 이는 라이드셰어 추적, 배달 업데이트, 내비게이션과 같은 진행 중심 사용자 여정을 위한 새로운 알림 템플릿입니다. 이는 임시 커스텀 알림 레이아웃을 표준화된 시스템 권장 형식으로 대체합니다.

DeliveryNotificationHelper.ktkotlin
fun buildDeliveryNotification(
    context: Context,
    orderId: String,
    progress: Float,  // 0.0 to 1.0
    currentStep: String
): Notification {
    val style = Notification.ProgressStyle()
        .setStyledByProgress(true)
        .setProgress(progress)
        .setProgressTrackerIcon(
            Icon.createWithResource(context, R.drawable.ic_delivery_truck)
        )
        .addProgressSegment(
            Notification.ProgressStyle.Segment(0.33f)
                .setColor(context, R.color.segment_preparing)
        )
        .addProgressSegment(
            Notification.ProgressStyle.Segment(0.33f)
                .setColor(context, R.color.segment_in_transit)
        )
        .addProgressSegment(
            Notification.ProgressStyle.Segment(0.34f)
                .setColor(context, R.color.segment_delivered)
        )
        .addProgressPoint(
            Notification.ProgressStyle.Point(0.0f)
                .setLabel("Order placed")
        )
        .addProgressPoint(
            Notification.ProgressStyle.Point(0.33f)
                .setLabel("Preparing")
        )
        .addProgressPoint(
            Notification.ProgressStyle.Point(0.66f)
                .setLabel("In transit")
        )
        .addProgressPoint(
            Notification.ProgressStyle.Point(1.0f)
                .setLabel("Delivered")
        )

    return Notification.Builder(context, DELIVERY_CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notification)
        .setContentTitle("Order #$orderId")
        .setContentText(currentStep)
        .setStyle(style)
        .setOngoing(true)
        .build()
}

ProgressStyle은 세그먼트(진행 바의 색상 섹션), 포인트(레이블이 있는 마일스톤), 바를 따라 이동하는 트래커 아이콘을 지원합니다. setStyledByProgress(true)를 설정하면 시스템이 완료 상태에 따라 세그먼트에 색상을 적용합니다. Android 알림에 대한 면접 준비에서 ProgressStyle과 표준 setProgress() 알림을 언제 사용해야 하는지 이해하는 것이 필수적입니다: ProgressStyle은 명확한 마일스톤이 있는 다단계 여정용이고, setProgress()는 파일 다운로드와 같은 단일 작업 진행에 적합합니다.

OnBackInvokedCallback을 사용한 Predictive Back 내비게이션

Android 16은 onBackPressed()에서 OnBackInvokedCallback API로의 다년간 마이그레이션을 완료합니다. 시스템은 뒤로 가기 제스처 중에 목적지 화면의 "피크" 애니메이션을 표시하여 사용자가 커밋하거나 취소할 수 있게 합니다. 콜백을 등록하지 않고 onBackPressed()를 오버라이드하는 앱은 이 애니메이션을 깨뜨립니다.

DetailActivity.ktkotlin
class DetailActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (Build.VERSION.SDK_INT >= 36) {
            onBackInvokedDispatcher.registerOnBackInvokedCallback(
                OnBackInvokedDispatcher
                    .PRIORITY_SYSTEM_NAVIGATION_OBSERVER
            ) {
                // Observe back navigation without intercepting
                // Log analytics or trigger save-draft logic
                analyticsTracker.logBackNavigation(
                    screen = "detail"
                )
            }
        }
    }
}

새로운 PRIORITY_SYSTEM_NAVIGATION_OBSERVER 우선순위를 사용하면 앱이 시스템 애니메이션을 차단하지 않고 뒤로 가기 이벤트를 관찰할 수 있습니다. Android 16은 또한 예측 애니메이션과 통합되면서 커스텀 백 스택 동작을 위한 finishAndRemoveTaskCallback과 moveTaskToBackCallback을 추가했습니다.

Predictive Back은 Android 16의 3버튼 내비게이션에서도 작동합니다: 뒤로 가기 버튼을 길게 누르면 제스처 내비게이션과 동일한 미리보기 애니메이션이 시작됩니다. 이는 면접에서 자주 나오는 주제로, 제스처 내비게이션만 언급하는 지원자는 절반을 놓치는 것입니다.

알림 쿨다운과 필수 그룹화

모든 Android 앱에 영향을 미치는 두 가지 추가 알림 변경 사항이 있습니다. 알림 쿨다운은 같은 앱의 연속 알림에 대한 알림 볼륨을 약 60초에 걸쳐 점진적으로 줄인 후 리셋합니다. 이는 기본적으로 활성화되어 있으며 개발자가 오버라이드할 수 없습니다.

필수 알림 그룹화는 앱이 setGroup()을 사용하든 말든 시스템이 알림을 자동으로 그룹화한다는 것을 의미합니다. 참여를 위해 개별 알림 눈에 띄는 정도에 의존했던 앱은 알림 전략을 재고해야 할 수 있습니다.

면접 준비에서 이러한 변경 사항은 Kotlin 코루틴과 Flow에 대한 질문과 잘 어울립니다. 알림을 효율적으로 배치 처리하고 스로틀링하는 것은 종종 코루틴 기반 디바운스 패턴을 포함하기 때문입니다.

Health Connect FHIR API와 RangingManager

Android 16은 Health Connect를 FHIR(Fast Healthcare Interoperability Resources) 쓰기 지원으로 확장하여 건강 앱이 구조화된 의료 기록을 생성하고 저장할 수 있게 합니다. RangingManager API는 BLE 채널 사운딩, BLE RSSI, Ultra-Wideband, Wi-Fi RTT에 걸친 거리/각도 측정을 통합하여 이전에 네 개의 별도 API 표면이 필요했던 것을 통합했습니다.

사진 선택기는 동일한 샌드박스 보안 모델을 유지하면서 개발자가 선택기 외관을 제어할 수 있는 더 깊은 사용자 지정 API를 얻었습니다. 클라우드 미디어 제공자 검색은 Developer Preview 2에서 추가되었습니다.

이러한 API는 일반 Android 면접에서 나올 가능성은 낮지만 헬스테크, IoT 또는 미디어 중심 애플리케이션의 도메인 특정 역할에서는 중요합니다.

Android 16 면접 질문과 답변

다음은 위에서 다룬 동작 변경 및 API 변경에 기반하여 Android 개발자 면접에서 가장 자주 나올 가능성이 높은 질문입니다.

Q: API 36을 타겟팅할 때 필수 동작 변경은 무엇인가요? 세 가지 변경이 적용됩니다: Edge-to-Edge 렌더링(옵트아웃 불가), 600dp 이상 화면에서 방향/리사이즈 제한 무시, 시스템 전체에서 Predictive Back 내비게이션 활성화. 앱은 WindowInsets를 올바르게 처리하고, 반응형 레이아웃을 지원하며, onBackPressed()에서 OnBackInvokedCallback으로 마이그레이션해야 합니다.

Q: 데스크톱 모드가 앱 아키텍처에 어떤 영향을 미치나요? 데스크톱 모드는 독립적인 디스플레이 세션을 생성합니다. 앱은 Display 객체 캐싱을 피하고, 동적 윈도우 메트릭을 지원하고, 키보드/마우스 입력을 처리하고, 멀티 인스턴스 시나리오를 고려해야 합니다. ActivityOptions.launchDisplayId API를 사용하면 프로그래밍 방식으로 특정 디스플레이를 타겟팅할 수 있습니다.

Q: ProgressStyle이 setProgress()를 대체해야 하는 경우는 언제인가요? ProgressStyle은 명확한 마일스톤이 있는 다단계 사용자 여정(라이드셰어, 배달, 내비게이션)용입니다. 표준 setProgress()는 단일 작업 진행(파일 다운로드, 업로드)에 적합합니다. ProgressStyle은 알림 셰이드에서 높은 가시성을 얻습니다.

Q: Android 16의 메이저/마이너 SDK 릴리스 모델은 무엇인가요? 메이저 릴리스(2025년 3월)에는 동작 변경이 포함되며 targetSdkVersion 업데이트가 필요합니다. 마이너 릴리스(2025년 12월)는 동작 변경 없이 새로운 API를 추가하며, targetSdkVersion 범프가 필요하지 않습니다. 이는 안정성과 혁신을 분리합니다.

Q: Predictive Back이 3버튼 내비게이션에서 어떻게 작동하나요? API 36 이상에서 3버튼 내비게이션의 뒤로 가기 버튼을 길게 누르면 제스처 내비게이션과 동일한 예측 애니메이션이 트리거됩니다. 앱은 적절한 우선순위로 OnBackInvokedCallback을 등록해야 합니다. PRIORITY_SYSTEM_NAVIGATION_OBSERVER 우선순위를 사용하면 가로채지 않고 관찰할 수 있습니다.

연습을 시작하세요!

면접 시뮬레이터와 기술 테스트로 지식을 테스트하세요.

Sources

Android 16이 개발자 면접에 미치는 영향

  • Edge-to-Edge는 API 36에서 더 이상 선택 사항이 아닙니다. 모든 화면, 특히 커스텀 툴바와 바텀 시트에서 올바른 WindowInsets 처리를 감사하세요.
  • 고정 방향 매니페스트를 WindowSizeClass를 사용한 Jetpack Compose 반응형 레이아웃으로 교체하세요. Android 17(API 37)은 이미 옵트아웃을 제거했습니다.
  • 데스크톱 모드는 Pixel 8 이상과 Samsung 플래그십에서 프로덕션 준비가 완료되었습니다. 외부 디스플레이, 키보드 입력, 멀티 인스턴스 시나리오로 앱을 테스트하세요.
  • onBackPressed()에서 OnBackInvokedCallback으로 마이그레이션하세요. 시스템 애니메이션을 차단하지 않고 분석 추적을 위해 PRIORITY_SYSTEM_NAVIGATION_OBSERVER를 사용하세요.
  • 다단계 사용자 여정에는 Notification.ProgressStyle을 채택하세요. 알림 쿨다운과 필수 그룹화는 타겟 SDK에 관계없이 모든 앱에 영향을 미칩니다.
  • 메이저/마이너 SDK 모델은 동작 변경이 연간 한 번 발생한다는 것을 의미합니다. 마이너 SDK는 호환성 위험 없이 새로운 API를 가져옵니다.

연습을 시작하세요!

면접 시뮬레이터와 기술 테스트로 지식을 테스트하세요.

오늘의 챌린지

Android 코드의 버그를 찾을 수 있나요

실제 코드 한 조각, 숨은 버그 하나, 하루 한 번. 계정 없이 바로 도전할 수 있습니다.

Anthony Fillion-Maillet

작성자

Anthony Fillion-Maillet

SharpSkill 창업자

10년 이상 풀스택 개발을 해왔습니다. SharpSkill을 운영하며 이곳에 게시되는 모든 내용에 책임을 집니다.

2026년 9월 21일 업데이트

태그

#android
#android-16
#mobile-development
#interview-questions

공유

관련 기사