Glacier's Daily Log

Compose의 리컴포지션 판단 메커니즘과 Stability 본문

Coding/Android

Compose의 리컴포지션 판단 메커니즘과 Stability

h__glacier_ 2024. 12. 13. 12:42
반응형

Jetpack Compose는 Recomposition 최적화에 관심을 가지고 개발해야 완성도가 높은 결과물을 기대할 수 있다.

최적화 방안 중 하나인, Stability를 고려하는 방법에 대해 알아보자.


Compose는 Stability(안정성)와 Recomposability(리컴포지션 가능성)를 기반으로 효율적으로 리컴포지션을 수행한다.

1. Stability (안정성)

  • Stability는 데이터가 불변(Immutable) 또는 변경이 없을 것으로 예측되는지를 나타냄.
  • 안정성은 @Stable 어노테이션 또는 컴파일러 분석에 의해 결정됨.
    • Stable Class:
      • 객체의 상태가 변하지 않거나 변화를 잘 감지할 수 있는 클래스.
      • Kotlin의 data class나 ImmutableList 같은 불변 객체가 이에 해당함.
    • Unstable Class:
      • 내부적으로 상태가 변할 수 있지만 Compose에 명시적으로 이를 알리지 않는 클래스.

2. Recomposition Skipping (리컴포지션 건너뛰기)

  • Compose는 안정성을 확인하여 이전 데이터와 동일한 데이터라면 해당 Composable을 리컴포지션하지 않고 건너뛰는 최적화 작업을 진행.
  • 만약 데이터가 Stable하고, 이전 데이터와 새로운 데이터가 같다면, == 비교를 통해 변화가 없음을 확인함.
    • ImmutableList, ImmutableSet, ImmutableMap 등도 Stable 객체로 간주되므로 효율적으로 처리.

3. 그러면?

  • 불필요한 var 사용 지양
  • 컬렉션 사용시 불변 컬렉션 사용 검토 (ImmutableList, ImmutableMap 등..)
  • 커스텀 객체에는 Stable 또는 Imutable 어노테이션을 사용하여 직접 마킹
    • 변할 수 있는 객체에 Stable을 붙인다면, 상태변경이 안되는 이슈가 생길 수 있으니 신중하게 설계해야함.

다음에는, Strong Skipping Mode에 대해 알아보자.

반응형
Comments