不変オブジェクトとは、一度作成すると状態を修正または変更できないオブジェクトです。Java では、不変オブジェクトには次の特性があります。
1. 状態耐性: オブジェクトのプロパティ値は変更できません。
2. スレッド セーフ: 不変オブジェクトの状態は変更できないため、マルチスレッド アクセスに追加の同期手段は必要なく、スレッド セーフです。
3. セキュリティ (セキュリティ): 不変オブジェクトの値は悪意を持って変更できないため、セキュリティが重要なコンテキストに適しています。
4. 再利用性: 不変オブジェクトは状態が変わらないため、副作用を気にすることなく何度でも使用できます。
不変オブジェクトを作成するには、いくつかの手順を実行する必要があります。
1. クラス宣言を最終的なものにする
クラスをfinal宣言すると、他のクラスがそのクラスを継承できなくなり、サブクラスがその状態を変更できなくなります。
2. プロパティをプライベートおよびファイナルとして宣言します
プロパティが外部から直接アクセスできないこと、また割り当て後に変更できないことを確認してください。
3. 状態を変更するメソッドが提供されていない
setter メソッドなど、オブジェクトの状態を変更するメソッドを提供しないでください。
4. 読み取り専用メソッドを提供する
オブジェクトのプロパティ値を取得するメソッドは提供しますが、プロパティ値を変更するメソッドは提供しません。
以下は、不変 Java クラスを作成する方法を示す例です。
public final class ImmutablePerson {
private final String name;
private final int age;
public ImmutablePerson(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
この例では、Immutableperson クラスにはコンストラクターでのみ初期化できる 2 つのプライベート Final プロパティがあり、それらを変更するメソッドは提供されていません。したがって、Immutableperson は、一度作成されると状態を変更できない不変オブジェクトです。
上記のパターンに従うことで、コードの保守性、スレッドの安全性、セキュリティの確保に役立つ不変オブジェクトを作成できます。