1. AppCompatActivity 클래스란?
AppCompatActivity 클래스는 클래스명칭대로 Android의 기본화면을 구성하는
Activity 클래스를 상속받아 기능을 확장한 클래스이다.
이 클래스의 주된 목적은 하위 호환성(Backward Compatibility)를 제공하여 이전 버전의 Android 기기에서도 최신 Android 기능(특히 Material design과 Toolbar)을 안정적으로 사용할 수 있게하는 클래스이다.
2. 기본 구조
| 부모 클래스 | android.app.Activity | 안드로이드 앱의 기본 단위로, 사용자와 상호작용하는 단일 화면을 의미 |
| 자식 클래스 | androidx.appcompat.app.AppCompatActivity | Activity를 상속하여 테마, 위젯, 호환성 기능을 추가한 클래스 |
3. AppCompatActivity의 주요 목적과 기능
| 하위 호환성(Backward Compatibility) | Android 버전에 관계없이 동일한 UI/UX를 보장합니다. 예: Material Design 컴포넌트를 Android 4.x에서도 표시 가능 |
| ActionBar / Toolbar 지원 | 기존 ActionBar 대신 Toolbar를 표준으로 사용 가능하게 함. setSupportActionBar(toolbar)로 쉽게 커스터마이징 가능 |
| Fragment 지원 | androidx.fragment.app.Fragment 기반의 프래그먼트를 관리 가능. → 구형 기기에서도 최신 FragmentManager 기능 사용 가능 |
| Material Design 테마 지원 | colorPrimary, colorSecondary(이전 colorAccent) 등 머터리얼 속성을 구형 기기에서도 적용 |
| Lifecycle Owner 기능 | AppCompatActivity는 LifecycleOwner 인터페이스를 구현하므로, LiveData, ViewModel, LifecycleObserver 등 Jetpack 컴포넌트와 자연스럽게 연동 가능 |
4. Lifecycle
AppCompatActivity는 Activity의 수명주기를 그대로 따르며, Jetpack 라이프 사이클 컴포넌트와도 자연스럽게 연동된다.
| onCreate() | Activity 최초 생성 시 | 레이아웃 초기화(setContentView), 변수 초기화 등 |
| onStart() | 화면이 사용자에게 보이기 직전 | UI 업데이트 준비 |
| onResume() | 화면이 사용자에게 완전히 표시됨 | 사용자 입력 처리 시작 |
| onPause() | 다른 화면에 의해 가려짐 | 리소스 일시 해제, 애니메이션 중지 |
| onStop() | 더 이상 화면이 보이지 않음 | 데이터 저장, 리소스 해제 |
| onDestroy() | Activity 종료 직전 | 남은 리소스 정리 |
- onCreate()
보통 개발자는 onCreate() 안에서 다음과 같은 일을 한다.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) // 부모의 초기화 코드 실행 (필수!)
setContentView(R.layout.activity_main) // 화면 레이아웃 연결
initViews() // 버튼, 텍스트 등 UI 초기화
setupListeners() // 클릭 이벤트 연결
loadData() // DB나 네트워크에서 데이터 로드
}
- UI를 화면에 연결하고 (setContentView)
- 버튼, 텍스트 등의 뷰를 초기화하고,
- 필요한 데이터나 리소스를 불러오는 작업을 처리한다.
왜 super.onCreate()를 반드시 호출해야 할까?
AppCompatActivity (또는 Activity) 내부에서는
테마 초기화, Window 구성, Toolbar 설정 등 시스템 내부 초기화 작업이 super.onCreate() 안에서 이루어짐!
따라서, 호출하지 않으면
테마가 적용되지 않거나, 화면이 제대로 표시되지 않는 문제가 생김!
'Android' 카테고리의 다른 글
| AGP(Android Gradle Plugin)이란? (0) | 2025.11.11 |
|---|---|
| [Android] - @JavascriptInterface에 대해서 (0) | 2025.11.04 |
| [Android] - 안드로이드 앱에 웹 서버 심기: Spring Boot 코드 재활용 전략 (0) | 2025.11.04 |
| Android.Manifest 클래스에 대해서 (0) | 2025.10.23 |
| [Kotlin] - companion object (0) | 2025.10.21 |