반응형
2025년 1월 15일 출시된 Jetpack Compose 1.8.0-alpha08 버전에서는 TextAutoSize, 제스처 동작 변경, 클립보드 인터페이스 추가 등의 중요한 개선 사항이 포함되었습니다. 이번 업데이트의 주요 내용을 자세히 설명하겠습니다.
1. TextAutoSize란?
TextAutoSize는 텍스트의 크기를 자동으로 조정하여 주어진 레이아웃 제약 조건에 맞게 최적의 크기를 설정하는 기능입니다.
주요 기능:
- 부모 컨테이너의 크기에 따라 텍스트 크기를 자동으로 조정
- 최대 줄 수(maxLines)를 설정하여 텍스트가 지정된 라인을 초과하지 않도록 제한
- 기본적인 크기 조정 외에도 커스텀 크기 조정 로직을 구현할 수 있도록 API 제공
적용 예제:
TextAutoSize(
text = "Compose Text AutoSize Example",
maxLines = 2,
style = TextStyle(fontSize = 20.sp)
)
변경 전 후 비교:
변경 전 (기존 AutoSize 사용)
AutoSize(text = "Hello Compose", maxLines = 1)
변경 후 (TextAutoSize로 변경)
TextAutoSize(text = "Hello Compose", maxLines = 1)
어떤 점이 개선되었나?
- 커스텀 구현 가능: 개발자가 텍스트 크기 조정을 더 세밀하게 제어할 수 있음
- 더 나은 성능: 레이아웃 측정 시 불필요한 재계산 최소화
- 가독성 향상: 자동 크기 조정 시 가독성을 고려한 알고리즘 적용
2. isDetectTapGesturesImmediateCoroutineDispatchEnabled란?
isDetectTapGesturesImmediateCoroutineDispatchEnabled는 탭 제스처 이벤트의 처리를 즉시(dispatch immediately) 수행할지 여부를 결정하는 플래그입니다.
주요 역할:
- 기존의 이벤트 처리 지연(Lag) 문제를 해결
- 즉시 디스패치(immediate dispatch): 사용자의 탭 동작을 감지한 후, Coroutine을 즉시 실행
- 이전에는 동기화 지연이 발생할 수 있었으나, 새로운 플래그를 통해 즉각적인 처리가 가능
변경 전 후 비교:
변경 전 (기존 비활성화 시):
DetectTapGesturesEnableNewDispatchingBehavior = true
변경 후 (새로운 방식으로 적용):
ComposeFoundationFlags.isDetectTapGesturesImmediateCoroutineDispatchEnabled = true
적용 예제:
Box(
modifier = Modifier
.fillMaxSize()
.pointerInput(Unit) {
detectTapGestures {
println("Tap detected immediately!")
}
}
)
어떤 점이 개선되었나?
- 탭 이벤트의 즉각적인 응답성 향상
- 플래그 위치 통합: ComposeFoundationFlags에서 모든 관련 플래그를 관리하여 유지보수 용이
- 불필요한 이벤트 처리 지연 제거
3. TapGestureDetector의 즉시 전달(immediate dispatch)란?
**TapGestureDetector API의 즉시 전달(immediate dispatch)**은 탭 이벤트가 발생하자마자 즉시 처리가 시작되는 방식을 의미합니다.
이전 동작:
- 탭 이벤트가 발생하면 Compose는 처리 전에 내부 상태를 업데이트하고 UI 변경을 고려
- 따라서 약간의 지연(latency)이 발생할 수 있었음
변경 후 동작:
- 이벤트가 발생하는 즉시 코루틴이 시작되며, UI 반응 속도가 향상됨
- 지연을 최소화하고 더 부드러운 사용자 경험을 제공
즉시 전달의 동작 흐름:
- 사용자가 화면을 터치
- 이벤트가 감지되자마자 해당 동작이 즉시 디스패치
- UI 갱신이 신속하게 이루어짐
적용 예제:
Box(
modifier = Modifier
.fillMaxSize()
.pointerInput(Unit) {
detectTapGestures(
onTap = { offset ->
println("Tapped at $offset, processed immediately!")
}
)
}
)
어떤 점이 개선되었나?
- 즉각적인 반응: UX가 더 빠르고 부드러워짐
- 복잡한 제스처 로직에서도 지연 시간 감소
- Compose 내부 이벤트 처리 최적화
4. 성능 개선 요약 및 예제
- 텍스트 크기 조정:
- 불필요한 크기 재계산 최소화 → 렌더링 성능 향상
- 화면 크기에 따라 동적 크기 조정 시 부드러움 증가
TextAutoSize(text = "Adaptive Text", maxLines = 2)
- 탭 이벤트 처리:
- 즉시 디스패치 적용으로 지연 감소 및 UI 반응성 향상
- 입력 이벤트의 빠른 처리로 사용자 만족도 증가
detectTapGestures { println("Immediate tap detected!") }
- 툴팁 통합:
- 중복된 코드 제거 → 메모리 사용량 최적화 및 유지보수 간소화
BasicTooltipBox { Text("Tooltip Example") }
5. 적용 가이드
업데이트 방법
Gradle에서 다음 종속성을 사용하여 최신 버전 적용:
dependencies {
implementation "androidx.compose.foundation:foundation:1.8.0-alpha08"
}
반응형
'Updates.' 카테고리의 다른 글
Navigation Compose 2.8.8 -> 2.8.9 변경 사항 및 적용 방법 (2) | 2025.03.25 |
---|---|
🚀 Jetpack Compose BOM 2025.03.00 업데이트 정리 및 변경 사항 분석 (0) | 2025.03.25 |
Jetpack Compose UI 1.7.8 업데이트 상세 분석 (0) | 2025.02.15 |
Jetpack Compose 1.8.0-beta02 업데이트 상세 분석 (1) | 2025.02.14 |