Effective Javaを読んでいる⑬

良いデザインは情報を隠蔽する

  • 良いデザインは内部でもっているデータや実装を出来る限り他のモジュールから隠蔽する。
  • モジュールはAPI経由でのみ伝達され、内部で何が行われているか他のモジュールは意識しない。

なぜ隠蔽するか

  • 分離されたモジュールは個別に開発したりテストしたりできる。
  • すると、並列に開発できる。
  • モジュールが分離されていれば1つ1つのモジュールを理解しやすいし、変更が他のモジュールに影響を与えづらいからメンテナンスしやすい。
  • 再利用もしやすい。
  • どのモジュールが駄目なのか判断しやすいので、大きいシステムが開発しやすい。

どうやって隠蔽するか

  • 要素へのアクセスを適切に制限する。
  • アクセス修飾子を適切につけると公開を制限できる。

どういう基準で公開を制限する?

  • とにかく必要最低限のレベルで要素を公開する。
クラスをpublicにすると?
  • 使用者からそのクラスが見える(そのクラスを使用できる)ので、別バージョンのリリースで変更したり消したり出来ない
  • 見せなくていい場合はアクセス範囲を絞るべき
長さが0でない配列のフィールドはfinalでも常に破壊可能
  • フィールドのアクセスをprivateにして変更不可なリストに突っ込めばいい
  • フィールドのアクセスをprivateにしてgetterでクローンを返してもいい

結論

とにかくいろんな要素をできるだけ公開しない