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

안드로이드의 Application 클래스

skydovesJaewoong Eum (skydoves)||7분 소요

안드로이드의 Application 클래스

Application 클래스는 안드로이드에서 전역 애플리케이션 상태(global application state)를 유지하기 위한 기본 클래스입니다. Activity, Service, BroadcastReceiver, ContentProvider보다 먼저 인스턴스화되며, 앱 프로세스가 살아 있는 동안 계속 존재합니다. 개별 컴포넌트보다 오래 유지되는 Context를 제공하기 때문에, 라이브러리 초기화, 의존성 주입(dependency injection) 프레임워크 설정, 공유 리소스 구성 등 한 번만 수행하면 되는 초기화 작업을 배치하는 표준적인 장소로 활용됩니다. 이 단원을 학습하시면 다음 내용을 이해하실 수 있습니다.

  • 안드로이드 프로세스 생명주기에서 Application 클래스가 언제, 어떻게 생성되는지 설명할 수 있습니다.
  • Application 클래스의 onCreate()와 메모리 콜백이 수행하는 역할을 파악할 수 있습니다.
  • 커스텀 Application 서브클래스의 올바른 사용법과 잘못된 사용법을 구분할 수 있게 됩니다.
  • onCreate()에서 메인 스레드를 블로킹하는 등의 흔한 실수를 방지하는 방법을 익힐 수 있습니다.

프로세스 생명주기와 Application 초기화

안드로이드 시스템이 앱 프로세스를 시작하면, 다른 어떤 컴포넌트보다 먼저 Application 클래스(또는 매니페스트에 지정된 서브클래스)의 인스턴스를 단 하나만 생성합니다. 이 과정은 프로세스 생명주기 동안 오직 한 번만 발생하며, 이후 어떤 컴포넌트에서든 Context.getApplicationContext()를 통해 해당 인스턴스에 접근할 수 있습니다. 즉, Application 클래스는 앱 전체에서 단일 인스턴스로 존재하는 싱글톤 객체와 유사한 특성을 지닙니다.

class MyApplication : Application() {

    override fun onCreate() {
        super.onCreate()
        initializeTimber()
        initializeDependencyInjection()
    }

    private fun initializeTimber() {
        if (BuildConfig.DEBUG) {
            Timber.plant(Timber.DebugTree())
        }
    }

    private fun initializeDependencyInjection() {
        // Hilt는 @HiltAndroidApp 어노테이션을 통해 자동으로 초기화를 처리합니다
    }
}

매니페스트에서 커스텀 서브클래스를 다음과 같이 선언합니다.

<application
    android:name=".MyApplication"
    android:label="@string/app_name">
    <!-- Activity, Service 등 컴포넌트 선언 -->
</application>

android:name 속성을 별도로 지정하지 않으면, 시스템은 기본 Application 클래스를 사용합니다. 실무에서는 대부분의 프로젝트가 커스텀 Application 서브클래스를 하나 정의하여 사용하므로, 면접에서 이 구조를 정확히 이해하고 계신다면 좋은 인상을 줄 수 있습니다.

주요 생명주기 메서드

Application 클래스는 onCreate() 외에도 여러 생명주기 메서드가 있습니다.

**onCreate()**는 메인 스레드에서 실행되며, 다른 모든 컴포넌트가 생성되기 전에 호출됩니다. 전역 초기화 작업은 바로 이 메서드에서 수행해야 합니다. 다만 이 메서드에서 오래 걸리는 작업을 수행하면 첫 프레임 렌더링이 지연되어 콜드 스타트(cold start) 시간이 늘어납니다. 데이터베이스 마이그레이션이나 네트워크 호출 같은 무거운 작업은 백그라운드 스레드로 위임하거나 지연 초기화(lazy initialization)를 적용해야 합니다. 실무에서 콜드 스타트 시간을 측정할 때는 Android Studio의 Logcat에서 Displayed 키워드를 검색하면 첫 Activity가 화면에 표시되기까지 걸린 시간을 확인하실 수 있습니다.

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

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

구독하기