LoginSignup
0
0

More than 3 years have passed since last update.

可変オブジェクト/不変オブジェクト

Last updated at Posted at 2019-12-06

初学者ですが、個人的な勉強のためまとめました

可変オブジェクト/不変オブジェクト

・オブジェクトに一度セットしたフィールドの値を、後から変更できるオブジェクトを可変(mutable)オブジェクト、変更できないオブジェクトを不変オブジェクト(immutable)という

java.lang.Stringクラスjava.io.Fileクラスのインスタンスは不変オブジェクトの代表例であり、
値を後から変更することはできない
新しい値を扱いたい場合は新しいインスタンスを作るしかないが、「変数の値(オブジェクトに対する参照)を変更」するのであって、「オブジェクトの状態を変更」するわけではないで、そこの違いをしっかり理解すべし

・不変なオブジェクトを定義するには以下のようにする
 ①オブジェクトの内部状態を変更可能なメソッドを提供しない(setterメソッドなど)
 ②クラスをfinalで宣言し、どのメソッドもオーバーライドされないことを保証する(サブクラスからの状態の変更を防ぐ)
 ③全てのフィールドを"private final"で定義する("final"の指定は必須ではないが、より明示的に不変クラスであることを宣言できる)
 ④内部に可変オブジェクトを保持している場合、そのオブジェクトを外部に提供しない。(getterメソッドなど)また、該当可変オブジェクトの値を内部的に変更しない

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0