일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 인스타핫플
- 어플개발
- 범물동카페
- 코딩
- 안드로이드앱개발
- 지산동카페
- 애드몹
- 동성로핫플
- 앱개발
- 수성구맛집
- 감성카페
- 동성로맛집
- androidstudio
- Android
- 동성로카페
- 코딩공부
- 안드로이드개발
- 애드센스
- 안드로이드스튜디오
- 대구핫플
- 안드로이드앱
- 파이썬
- compose
- 의무경찰
- 대구인스타핫플
- 안드로이드
- 대구맛집
- 수성구카페
- 대구카페
- 개발자
- Today
- Total
Glacier's Daily Log
Compose Strong Skipping Mode의 람다 메모라이제이션 기능 본문
Strong Skipping Mode의 람다 메모라이제이션 기능
Strong Skipping Mode는 Compose가 람다를 처리하는 방식을 개선해 리컴포지션 최적화를 자동으로 지원할 수 있음. 이 기능은 Compose 1.5.0 이상에서 활성화되며, 람다 사용 시 리컴포지션을 방지할 수 있도록 자동으로 최적화를 제공할 수 있음.
람다 메모라이제이션의 기본 원리
Compose는 람다가 이전과 동일한 객체인지 확인해 리컴포지션을 건너뛸 수 있을지 판단함. 이전 Compose에서는 람다가 새로운 객체로 간주되면 리컴포지션이 발생했지만, Strong Skipping Mode에서는 이를 자동으로 메모라이제이션하여 불필요한 리컴포지션을 줄일 수 있음.
1. 람다의 안정성 판단
- Strong Skipping Mode는 람다의 Stable 여부를 판단할 수 있음.
- 람다가 이전 값과 동일한 동작을 수행하는지 확인해 메모라이제이션 없이도 리컴포지션을 건너뛸 수 있음.
2. 메모라이제이션 자동화
- 기존에는 개발자가 remember를 사용해 람다를 안정화해야 했음.val onClick = remember { { item: String -> onItemClicked(item) } }
- Strong Skipping Mode가 활성화되면 Compose가 람다를 자동으로 메모라이제이션할 수 있어 위와 같은 작업이 필요 없을 수 있음.
Strong Skipping Mode 이전 vs 이후
이전 방식
람다가 매번 새로 생성되면 Compose는 이를 새로운 객체로 간주해 리컴포지션을 트리거할 수 있음.
@Composable fun Example(item: String, onItemClicked: (String) -> Unit) {
Button(onClick = { onItemClicked(item) }) { Text("Click me") }
}
위 코드에서는 onClick 내부의 람다가 새롭게 생성되므로, 버튼이 리컴포지션될 가능성이 있음.
이후 방식
Strong Skipping Mode는 람다를 내부적으로 메모라이제이션해 리컴포지션을 방지할 수 있음.
@Composable fun Example(item: String, onItemClicked: (String) -> Unit) {
Button(onClick = { onItemClicked(item) }) { Text("Click me") }
}
동일한 람다라고 Compose가 판단하면 리컴포지션을 건너뛸 수 있음.
적용 범위와 한계
적용되는 경우
- 람다 내부가 간단하고 상태를 변경하지 않는 경우:
- Compose는 람다의 내부 구조를 분석해 변경 여부를 판단할 수 있음.
- 예를 들어, 전달된 매개변수를 사용하는 단순 람다.
- 람다가 Stable 객체만 사용하는 경우:
- 람다가 불변 데이터나 Stable 객체를 참조할 경우 메모라이제이션 효과를 볼 수 있음.
적용되지 않는 경우
- 람다 내부에서 상태를 변경하는 경우:
- 람다가 외부 상태를 변경하거나 Stable하지 않은 객체를 참조하면 Compose는 이를 메모라이제이션하지 않을 수 있음.
- 이럴 때는 개발자가 명시적으로 remember로 안정화해야 할 수 있음.
- 람다가 복잡한 계산을 수행하는 경우:
- Strong Skipping Mode는 복잡한 계산이 포함된 람다를 메모라이제이션하지 않을 수 있음. 명시적으로 메모라이제이션하는 것이 필요할 수 있음.
람다 메모라이제이션이 필요한 경우 vs 필요 없는 경우
필요 없는 경우
Strong Skipping Mode가 활성화된 상태에서는 아래처럼 단순한 람다는 자동으로 메모라이제이션될 수 있음.
Button(onClick = { onItemClicked(item) }) { Text("Click me") }
여전히 필요할 수 있는 경우
람다가 상태를 참조하거나 동적으로 생성되는 경우 remember로 메모라이제이션을 명시적으로 처리해야 할 수 있음.
val onClick = remember(item) { { onItemClicked(item) } } Button(onClick = onClick) { Text("Click me") }

결론
- Strong Skipping Mode의 람다 메모라이제이션은 Compose가 개발자 대신 람다의 안정성을 자동으로 관리할 수 있도록 도와줌.
- 대부분의 단순 람다에서는 remember 없이도 리컴포지션 최적화가 가능할 수 있음.
- 하지만, 람다가 상태를 참조하거나 복잡한 연산을 수행하는 경우에는 여전히 명시적으로 remember를 사용하는 것이 필요할 수 있음.
'Coding > Android' 카테고리의 다른 글
Compose에서 동일한 Composable에 대해 여러 옵션의 Preview가 필요한 경우 (0) | 2025.02.13 |
---|---|
[React-Native] 리액트 네이티브 버전 업그레이드시 참고할 사이트 (1) | 2025.01.07 |
Compose의 Strong Skipping Mode에 대해 (0) | 2024.12.13 |
Compose의 리컴포지션 판단 메커니즘과 Stability (0) | 2024.12.13 |
[앱 개발 전문가] 기기 연동 안드로이드 앱을 개발해 드립니다. (BLE, MQTT, TCP, RTSP, PTZ, 클래식 블루투스 등) (4) | 2024.12.01 |