Android Application 이해하기 - 역할과 실전 활용
✨ 개요
Android 앱에서 Application 클래스 최상위 진입점
- 앱 전체의 라이프사이클을 관리
- 전역 상태를 유지하며
- 초기화 작업을
- 개발자가 커스터마이징할 수 있는 훅(hook) 앱 실행 시 가장 먼저 실행되는 컴포넌트 중 하나
1. ✅ Application 클래스의 주요 역할
- 앱 전체 생명주기 관리 (onCreate, onTerminate 등)
- 전역 상태 및 리소스 관리
- 싱글톤 객체 초기화 및 DI(의존성 주입) 설정
- 공통 유틸, 로그, Crash 리포팅 설정 등 앱 수준의 설정 처리
Application 클래스 생성
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
// 앱 전역 초기화 코드
initLogger()
initCrashHandler()
}
}
AndroidManifest.xml 선언
<application
android:name=".MyApp"
... >
</application>
2. ✅ 왜 필요한가?
- Activity/Service는 개별 컴포넌트에 해당하므로 앱 전역 관리가 어려움
- 앱 시작 시 공통 초기화 로직을 한곳에 모아두면 관리와 테스트가 용이함
- DI 프레임워크(Dagger, Hilt)와 함께 사용 시 루트 컨테이너로 설정됨
3. ✅ 실전 활용 예시
- Retrofit, Room 등의 전역 인스턴스 생성 및 초기화
- Firebase 초기화
- 다국어 설정, 테마 설정, 푸시 토큰 관리
class MyApp : Application() {
lateinit var database: AppDatabase
override fun onCreate() {
super.onCreate()
database = Room.databaseBuilder(
this, AppDatabase::class.java, "app-db"
).build()
}
}
4.⚠️ 주의사항
- Application의 onCreate()는 메인 스레드에서 실행되므로 블로킹 작업 금지
- 가능한 한 빠르게 실행되도록 구성해야 앱 시작 지연 방지 가능
- 초기화는 지연(Lazy) 또는 비동기로 나누는 것이 좋음
5.🧾 결론
- Application 클래스는 Android 앱 전체의 진입점이자 공통 리소스 관리의 중심입니다.
- 전역적으로 필요한 설정은 이곳에서 처리하면 깔끔하고 일관된 코드베이스 유지 가능
- 단, 메인 스레드 블로킹을 피하고 필요한 초기화만 수행하는 것이 Best Practice입니다.