不変オブジェクトとは何か?
不変オブジェクトとは、一度作成したら変更できないオブジェクトのことです。言い換えれば、インスタンス化された後の状態を変更することはできません。その値を変更しようとすると、更新された値を持つ新しいオブジェクトが作成され、元のオブジェクトは変更されません。
この概念は、関数型プログラミングをサポートするプログラミング言語でよく使われ、そこでは不変性が重要な特徴となっている。不変オブジェクトは、オブジェクトの状態を変更してはならない場面で有用である。たとえば、マルチスレッド環境では、変更可能なオブジェクトへの同時アクセスが競合状態やデータ破損を引き起こす可能性がある。
イミュータブル・オブジェクトには、ミュータブル・オブジェクトに比べていくつかの利点がある。第一に、スレッドセーフであり、同期の必要なくスレッド間で安全に共有できる。第二に、状態が予期せず変更されることがないため、推論が容易である。第三に、ハッシュ値が固定で時間の経過とともに変化しないため、ハッシュ・テーブルや集合のキーとして使用できる。
の不変オブジェクトの例 ジャワ にはString、Integer、LocalDateがある。Stringオブジェクトは一度作成されると、その値を変更することはできません。変更しようとすると、更新された値で新しいStringオブジェクトが作成されます。同様に、一度Integerオブジェクトが作成されると、その値を変更することはできません。
しかし、不変オブジェクトがすべての状況に適しているわけではない。オブジェクトの状態を頻繁に更新する必要がある場合など、場合によってはミュータブル・オブジェクトの方が適していることもある。このような場合、競合状態やデータの破損を防ぐために、ミュータブル・オブジェクトへのアクセスを確実に同期させることが重要です。
要約すると、イミュータブル・オブジェクトとは、一度作成したら変更できないオブジェクトのことです。マルチスレッド環境など、オブジェクトの状態を変更してはならない場合に便利です。イミュータブル・オブジェクトには、スレッドセーフ、推論のしやすさ、ハッシュテーブルや集合のキーとしての適性など、ミュータブル・オブジェクトにはない利点がいくつかあります。