0. stability / unstability 정의
해당 클래스가 하기 3가지 조건을 만족할 경우, Compose Compiler 에 의해 stable 하다고 간주된다.
다시 말해, stable한 타입의 경우 하기 내용을 준수 해야 한다.
- 두 인스턴스에 대한
equals()의 결과는 항상 동일하게 반환된다.
- 타입의 public 속성(property)이 변경되면 컴포지션에 통지 된다.
- 모든 public 속성(property) 의 타입들이 stable하다.
1. 외부 라이브러리 사용 문제
외부 라이브러리 사용 시, unstable한 Class를 Compose 함수 내에서 사용하게 될 수 있음.
이러면, 해당 모델은 외부 non-Compose 모듈에서 온 클래스이므로 기본적으로 Unstable 하다고 판단됨.
해당 인스턴스를 사용하는 모든 컴포저블들은 해당 모델의 필드가 변경될 때마다 재구성됨.
2. Mapper 활용
Mapper를 활용해 외부 모듈을 내 Compose 모듈로 변환해 사용하여 Stablility를 확보해야 함.
이를 통해 Compiler는 Stable 하다고 판단하여 상기 비효율 문제를 해결할 수 있음.
3. 대안
하지만 모델의 개수가 너무 많아질 경우 mapper를 하나 씩 대응하여 만들어주는 것도 많은 공수가 들.
- https://github.com/skydoves/compose-stable-marker
- 해당 라이브러리를 이용해서 domain 모델의 stable marker를 붙여주는 것도 좋은 대안.
- [Stability Configuration file](https://developer.android.com/develop/ui/compose/performance/stability/fix?_gl=1*18r83ta*_up*MQ.._gaOTc4NDY2ODExLjE3Mzc4NTczODU._ga_6HH9YJMN9MMTczNzg1NzM4NS4xLjAuMTczNzg1NzM4NS4wLjAuOTYxNDcwNzE4#configuration-file)
- 외부 모듈의 모델을 컴포즈 컴파일러가 안정하다고 판단할 수 있도록 설정해줄 수도 있음.