Java

【保守性とは】Javaで「private」を使うメリット

保守性のあるプログラム

まずは保守性のあるプログラムを例として組んでいきます。

(Main.java)

結果

このプログラムでは、「Test」クラスの変数「_x、_y」(初期値0)に値を設定することで、割り算結果を得ることができます。

「Main」クラスでは、その「Test」クラスをインスタンス化した後、「_x、_y」の値を設定し、割り算結果を得ています。

「_(アンダースコア)」は「Python」の慣例に乗っ取って、変数の先頭に記述して、アクセス制限したことを明示しています。

保守性のないプログラム

次は、保守性ないプログラムを記述していきます。

つまり、先ほどの「_x、_y」を「public」にして、「set」関数も無くします。

(Main.java)

一見先ほどのプログラムより行数も減って、よくなったと思うかもしれませんが、これが落とし穴になります。

その2つの例を順に見ていきましょう。

変数名を変更した時の落とし穴

ではここで、「Test」クラスの「x、y」変数の名前を変えてみます。

「x、y」ではなく、「div1、div2」にしてみたいと思います。

(Main.java)

この状態でコンパイルすると、以下のようなエラーが発生しました。

内容を確認すると、「Main」クラス内で存在しない変数を扱っていると言います。

具体的には、「x、y」の名前のまま使ってしまっているということです。

なので「Main」クラス内のプログラムも変更する必要があります。

(Main.java)

これでエラーはなくなりましたが、余計な作業を生み出してしまいました。

これがもし保守性のあるプログラムで書かれていたら、「Main」クラス内で変数名を修正することはありませんでした。

今回の例では修正する箇所が少なくて済みましたが、もし大きい規模のプログラムで同じことをやってしまったらどうなるでしょうか。

これが1つ目の落とし穴です。

割り算での落とし穴

次に、割り算をする際に「0」で割ってみたいと思います。

具体的には、「div2」の値を「0」にします。

(Main.java)

すると、以下のようなエラーが実行時に発生しました。

実は、Javaでは割り算の時に「0」で割ろうとすると、本来なら「値なし」というエラーメッセージが欲しいのですが、「ArithmeticException」という実行時エラーが発生していまいます。

なので条件分岐でエラーを回避する必要があります。

(Main.java)

今回は一度だけの条件分岐で済みました。

しかし、もし大きい規模のプログラムで同じことをやってしまったらどうなるでしょうか。

この条件分岐を何十何百回も書かないといけません。

これが2つ目の落とし穴です。

まとめ

・「private」を有効的に使用することで、保守性が高まる。

・保守性の低いプログラムは読めなくなる。(可読性が低い、メンテナンス性が低い

・保守性の高いプログラムを書くのは、バグ発見のしやすさに繋がる。

ABOUT ME
IT系だんし
プログラミングが大好きな人。 趣味でゲームやツール製作をしながら、プログラミング記事を書き続けています。