🐡

Kotlin の Compose の アノテーション

2024/08/05に公開

kotlin の @Stable / @Immutabl の違いはなんですか?

特性 @Stable @Immutable
変更可能性 オブジェクトの状態が変更可能 オブジェクトの状態が不変
コンパイラへの約束 状態が変更された場合、Compose Runtimeに通知する オブジェクトの状態が絶対に変更されない
再コンポーズの最適化 状態変更時のみ再コンポーズ オブジェクト参照が変わらない限り再コンポーズしない
適用対象 mutableな状態を持つクラスやインターフェース 完全に不変なクラス
内部フィールド mutableなフィールドを含むことができる すべてのフィールドがimmutableである必要がある
使用例 UIの状態を表すクラス、複数の実装を持つインターフェース データモデル、設定クラス
コンパイラの処理 変更通知を期待 完全に不変として扱う

Kotlinの@Stableアノテーションは、Jetpack Composeにおいて、あるクラスやプロパティが「安定している」ことを示すために使用されます。このアノテーションは、オブジェクトの状態が変わる可能性があるが、その変化がUIの再描画を必要としない場合に適用されます。

具体的には、@Stableアノテーションを付与することで、Composeコンパイラに対して、そのオブジェクトの状態が変わっても頻繁に再コンポーズする必要がないことを通知します。これにより、パフォーマンスの最適化が図られ、無駄なUIの再描画を減らすことができます。一方、絶対に不変なオブジェクトには@Immutableアノテーションが使用されます

Discussion