Effective Javaを読んでいる⑭

publicなクラスではpublicなフィールドではなくてアクセサメソッドを使おう

なんで

  • フィールドにアクセスした時に副次的な動作を入れられる
  • カプセル化の恩恵を受けられる

カプセル化の恩恵云々の話があんまりピンとこないのは多分大規模なアプリであったり、ライブラリを作った経験が無いからだと思う。API変えたくなったら変えちゃえばいいじゃん、てことが出来る環境でしか開発をしていないというか。逆にそういう環境だったらpublicなフィールドがあっても別にいいんじゃないのって気がする。

ソースコードを追っかけるときにこのフィールド変更してるのどこ?ってのを追いかけるのにアクセサメソッドの形になってると楽かな?ってのはたまに思うけどそれを実感したこともあんまりないような気がする。結局オブジェクトだとgetして破壊して、みたいなことはできるわけだし・・・。

フィールドごとに getter/setter を用意するな - ぐるぐる~
破壊出来ないレベルでの動作しか公開しない、というのは正しいと思う。

副次的な動作が云々、ってのは確かに利点のような気もするけどそれをgetterの仕事にしてしまうのは違和感があるような?そうでもない?

なんとなく一緒に見た記事

「privateな変数にpublicなアクセサを定義する」? - ネットの海の片隅で

getter/setterとはなんだったのか - プログラマーの脳みそ