반응형
Jetpack Compose는 Android의 최신 UI 툴킷으로, 선언형 UI 패러다임을 채택하여 전통적인 XML 기반 View 시스템과 차별화됩니다. 본 가이드에서는 Jetpack Compose의 생명주기를 자세히 설명하고, 기존 XML 기반 개발과의 차이점을 비교하며, 장단점을 분석합니다.
1. Jetpack Compose 생명주기 이해
Jetpack Compose의 생명주기는 Composable 함수의 호출 및 재구성(Recomposition) 과정을 중심으로 작동합니다. 주요 생명주기 이벤트는 다음과 같습니다.
Compose 생명주기 단계
- Initial Composition (초기 구성)
- Composable 함수가 처음 호출될 때 실행됨.
- UI 요소가 초기 생성되며 상태(state)가 설정됨.
- Recomposition (재구성)
- 상태(state)의 변경이 발생할 때 Compose는 해당 Composable 함수를 다시 실행.
- UI의 변경이 필요한 부분만 효율적으로 업데이트.
- Disposal (처리 해제)
- Composable이 Composition에서 제거될 때 실행.
- 리소스 정리 등의 작업을 수행할 수 있음.
Compose 생명주기 흐름도
Initial Composition → UI State Update → Recomposition → Disposal
생명주기 이벤트 감지 방법
Compose에서는 LaunchedEffect, DisposableEffect와 같은 효과(Effect) API를 활용하여 생명주기 이벤트를 처리할 수 있습니다.
예제 코드
@Composable
fun MyComposable() {
LaunchedEffect(Unit) {
// 초기 진입 시 실행 (onCreate에 해당)
println("Composable Created")
}
DisposableEffect(Unit) {
onDispose {
// Composable이 제거될 때 실행 (onDestroy에 해당)
println("Composable Destroyed")
}
}
}
2. XML 기반 View 시스템과의 비교
항목 Jetpack Compose XML 기반 View 시스템
UI 선언 방식 | 선언형 (Declarative) | 명령형 (Imperative) |
생명주기 관리 | Composable 호출 및 상태 기반 | Activity/Fragment 생명주기 의존 |
재구성(Recomposition) | 상태 변화 시 필요한 부분만 업데이트 | 전체 View 갱신 필요 |
코드 유지보수성 | 높은 재사용성과 간결한 코드 | XML과 Kotlin 코드 분리 |
성능 | 효율적인 상태 관리 및 성능 최적화 | 레이아웃 트리 복잡성 증가 |
3. Jetpack Compose의 장단점
장점 / 단점
간결한 코드 | 학습 곡선 |
재사용성 높은 모듈화 | 초기 빌드 시간 증가 |
성능 최적화 | 디버깅 어려움 |
Android View와 호환 |
4. MainActivity와 Compose 생명주기
Jetpack Compose는 Activity의 생명주기와 연동되며, 다음과 같은 순서로 동작합니다.
- onCreate() → Compose 초기 구성 수행 (Initial Composition)
- onStart() → Compose UI가 화면에 보이기 시작
- onResume() → 사용자 상호작용 가능, 이후 상태 변경 시 재구성 발생 (Recomposition)
- onPause() → UI 상태 보존
- onStop() → Compose UI 제거 가능 (Disposal 시작)
- onDestroy() → Compose 리소스 해제 (Disposal 완료)
MainActivity와 Compose 생명주기 관계 흐름도
Activity 생명주기:
onCreate → onStart → onResume → onPause → onStop → onDestroy
Compose 생명주기:
[onCreate ~ onStart] → Initial Composition
[onResume 이후] → Recomposition
[onStop ~ onDestroy] → Disposal
5. 마무리
Jetpack Compose는 선언형 UI를 통해 보다 직관적이고 효율적인 Android 앱 개발을 가능하게 합니다. 기존 XML 기반 View 시스템과 비교하여 코드의 간결성, 유지보수성, 성능 최적화 측면에서 많은 이점을 제공하지만, 학습 비용 및 디버깅 어려움 등의 단점도 고려해야 합니다.
반응형