0. stability / unstability 정의

해당 클래스가 하기 3가지 조건을 만족할 경우, Compose Compiler 에 의해 stable 하다고 간주된다.

다시 말해, stable한 타입의 경우 하기 내용을 준수 해야 한다.

  1. 두 인스턴스에 대한 equals()의 결과는 항상 동일하게 반환된다.
  2. 타입의 public 속성(property)이 변경되면 컴포지션에 통지 된다.
  3. 모든 public 속성(property) 의 타입들이 stable하다.

1. 외부 라이브러리 사용 문제

외부 라이브러리 사용 시, unstable한 Class를 Compose 함수 내에서 사용하게 될 수 있음.

이러면, 해당 모델은 외부 non-Compose 모듈에서 온 클래스이므로 기본적으로 Unstable 하다고 판단됨.

해당 인스턴스를 사용하는 모든 컴포저블들은 해당 모델의 필드가 변경될 때마다 재구성됨.


2. Mapper 활용

Mapper를 활용해 외부 모듈을 내 Compose 모듈로 변환해 사용하여 Stablility를 확보해야 함.

이를 통해 Compiler는 Stable 하다고 판단하여 상기 비효율 문제를 해결할 수 있음.


3. 대안

하지만 모델의 개수가 너무 많아질 경우 mapper를 하나 씩 대응하여 만들어주는 것도 많은 공수가 들.

  1. https://github.com/skydoves/compose-stable-marker
  2. [Stability Configuration file](https://developer.android.com/develop/ui/compose/performance/stability/fix?_gl=1*18r83ta*_up*MQ.._gaOTc4NDY2ODExLjE3Mzc4NTczODU._ga_6HH9YJMN9MMTczNzg1NzM4NS4xLjAuMTczNzg1NzM4NS4wLjAuOTYxNDcwNzE4#configuration-file)