Java ~カプセル化って結局なんのため?〜

こんにちはtorimilarです。

最近Oracle Java Silverを取得しようと、Javaを再勉強中なのですが、

結局のところカプセル化って何?となりました😅

クラス内のフィールドを書き換えられないように、private修飾子を用いるのですが、結局セッターで書き換えらるじゃん!それって意味あるの??

 

調べてみると、こちらのサイト*1がとても分かりやすかったので、ポイントだけ忘れないようにまとめます。

 ReadOnlyもしくはWriteOnlyを実現できる

セッターだけを記述すればフィールドに対してWriteOnly(書き込み専用)、ゲッターだけを記述すればフィードに対してReadOnly(読み込み専用)を実現できます。

フィールドの書き込みを禁止したい場合は、セッターを記述しなければよいということですね😁

 

クラスの内部設計を自由に変更できる

フィールドの変数名を変更した場合、カプセル化をしていない場合はフィールドに直接アクセスしている他クラスのプログラムはすべて変更する必要がある。

カプセル化をしている場合は、他クラスはセッター、ゲッターを使用しているため、他クラスには影響しない。変更するのは呼び出し先の変数名だけでよい。

プログラムの修正範囲を抑えることができますね😁

 

フィールドへのアクセスを検査できる

セッターメソッドを経由しなくては書き込みできない性質を利用して、設定されようとしている値が妥当かどうかを検査できる。

負の値を設定させたくない場合は、「 変数名 < 0の場合は値を設定しない」という条件をセッターメソッドに記述してあげればいいわけですね!😁

 

ひじょう〜〜に勉強になりました。