면접 질문실전 질문꼬리 질문

AndroidManifest 파일의 역할

skydovesJaewoong Eum (skydoves)||8분 소요

AndroidManifest 파일의 역할

AndroidManifest.xml 파일은 모든 안드로이드 프로젝트에 반드시 포함되어야 하는 필수 설정 파일입니다. 이 파일은 애플리케이션에 관한 핵심 정보를 안드로이드 운영 체제에 선언하며, 앱과 시스템 사이의 다리 역할을 수행합니다. 운영 체제는 앱 설치 시점과 런타임에 이 파일을 읽어 앱의 구조, 기능, 요구 사항을 파악합니다. 안드로이드 개발자라면 매니페스트 파일의 구조와 역할을 정확히 이해하는 것이 매우 중요하며, 면접에서도 자주 등장하는 주제이기도 합니다. 이 장을 마치면 다음 내용을 명확히 설명하실 수 있습니다.

  • 매니페스트가 Activity, Service, BroadcastReceiver, ContentProvider 등의 애플리케이션 컴포넌트를 어떻게 선언하는지 이해할 수 있습니다.
  • 권한(permission)의 선언 방식과 시스템의 권한 적용 메커니즘을 설명할 수 있습니다.
  • 인텐트 필터(intent filter)를 통해 컴포넌트가 암시적 인텐트(implicit intent)에 어떻게 응답하는지 파악할 수 있습니다.
  • 하드웨어 및 소프트웨어 기능 선언이 Google Play Store에서 기기 호환성에 어떤 영향을 미치는지 설명할 수 있습니다.

애플리케이션 컴포넌트 선언

매니페스트 파일은 앱에서 사용하는 모든 주요 컴포넌트를 등록합니다. Activity, Service, BroadcastReceiver, ContentProvider는 반드시 매니페스트에 선언해야 시스템이 해당 컴포넌트를 인스턴스화하고 상호작용할 수 있습니다. APK 안에 클래스 파일이 존재하더라도 매니페스트에 선언되지 않은 컴포넌트는 시스템이 실행할 수 없다는 점을 꼭 기억하셔야 합니다.

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme">

    <!-- 메인 액티비티: 런처에서 앱 실행 시 가장 먼저 실행되는 진입점 -->
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <service android:name=".MyService" />
    <receiver android:name=".MyBroadcastReceiver" />
    <provider android:name=".MyContentProvider"
        android:authorities="com.example.provider" />
</application>

각 컴포넌트 태그는 해당 컴포넌트의 클래스 이름, 외부 노출 여부(exported), 그리고 응답할 인텐트 필터 정보를 시스템에 전달합니다. 런처 Activity는 인텐트 필터에서 android.intent.action.MAINandroid.intent.category.LAUNCHER의 조합으로 식별됩니다. 참고로, Android 12(API 31) 이상에서는 인텐트 필터가 있는 컴포넌트에 android:exported 속성을 반드시 명시해야 하므로 유의하시기 바랍니다.

권한과 보안

매니페스트는 앱이 접근해야 하는 시스템 리소스와 기능에 대한 권한을 선언합니다. 사용자는 API 레벨에 따라 설치 전 또는 런타임에 이러한 권한 요청 정보를 확인하게 됩니다. INTERNET, ACCESS_FINE_LOCATION, READ_CONTACTS 등의 권한은 매니페스트의 최상위 레벨에서 선언합니다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 네트워크 통신을 위한 인터넷 접근 권한 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 정밀한 위치 정보 접근 권한 (GPS 기반) -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>

이 면접 질문은 구독자 전용입니다

Dove Letter를 구독하시면 안드로이드, 코틀린 개발 관련 독점 면접 질문의 전체 내용을 볼 수 있습니다.

구독하기