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