🐡
Kotlin の Compose の アノテーション
kotlin の @Stable / @Immutabl の違いはなんですか?
| 特性 | @Stable | @Immutable |
|---|---|---|
| 変更可能性 | オブジェクトの状態が変更可能 | オブジェクトの状態が不変 |
| コンパイラへの約束 | 状態が変更された場合、Compose Runtimeに通知する | オブジェクトの状態が絶対に変更されない |
| 再コンポーズの最適化 | 状態変更時のみ再コンポーズ | オブジェクト参照が変わらない限り再コンポーズしない |
| 適用対象 | mutableな状態を持つクラスやインターフェース | 完全に不変なクラス |
| 内部フィールド | mutableなフィールドを含むことができる | すべてのフィールドがimmutableである必要がある |
| 使用例 | UIの状態を表すクラス、複数の実装を持つインターフェース | データモデル、設定クラス |
| コンパイラの処理 | 変更通知を期待 | 完全に不変として扱う |
Kotlinの@Stableアノテーションは、Jetpack Composeにおいて、あるクラスやプロパティが「安定している」ことを示すために使用されます。このアノテーションは、オブジェクトの状態が変わる可能性があるが、その変化がUIの再描画を必要としない場合に適用されます。
具体的には、@Stableアノテーションを付与することで、Composeコンパイラに対して、そのオブジェクトの状態が変わっても頻繁に再コンポーズする必要がないことを通知します。これにより、パフォーマンスの最適化が図られ、無駄なUIの再描画を減らすことができます。一方、絶対に不変なオブジェクトには@Immutableアノテーションが使用されます
Discussion