※前回の講座がまだの人はこちらから
【Java入門⑦】クラス ~初心者でも安心!基礎から学べるプログラミング講座~
カプセル化とは?
前回の講座で紹介したCarクラスには以下の問題があります。
○インスタンス毎の情報を安易に閲覧できる
○インスタンスが保持している情報を安易に編集できる
つまり、他人が作成した車の情報を自由に見ることができ、勝手に改造することができます。
そこで、カプセル化という概念を用いることで、他人が勝手に参照・改造できないようにします。
カプセル化とは
カプセル化とは、クラスのメンバ変数やメソッド(処理)に対して、アクセスできる範囲を制限することです。
今までは、メンバ変数名を指定すれば、そのまま変数の中身を参照して、代入ができました。
カプセル化を行うことで、外部からのアクセスを制限し、メンバ変数名を指定するだけでは値を参照・編集ができない様になります。
カプセル化
前回の講座で作成したCarクラスをカプセル化します。
<Carクラス>
public class Car { public String model; public int height; public int width; public int fuel; }
今アクセス修飾子がpublicになっています。
そこをprivateに変えるだけでカプセル化が行えます。
public class Car { private String model; private int height; private int width; private int fuel; }
アクセス修飾子
アクセス修飾子とは、アクセス修飾子を付けた対象へアクセスできる範囲を指定する物です。
アクセス修飾子 | アクセス範囲 |
public | どこからでもアクセス可能 |
protected | クラス内および継承先からアクセス可能 |
(なし) | クラス内および同一パッケージからアクセス可能 |
private | クラス内からのみアクセス可能 |
今回、Carクラスのメンバ変数のアクセス修飾子をprivateにしました。
privateはクラス内からのみアクセス可能のため、Carクラスの外からアクセスすることができなくなりました。
これで勝手にメンバ変数の中身を参照・編集ができなくなります。
<実行結果>
CarApp.javaを動かそうとしても、Carクラスのメンバ変数はカプセル化されているため、アクセスすることができない旨のエラーが出力されます。
まとめ
カプセル化を行うことで、セキュリティ面が強化されます。
しかし、このままでは作成したCarクラスが使えません。
カプセル化してもクラスのメンバ変数を使える様にするため、メソッドを利用してメンバ変数へアクセスを行います。