カプセル化
カプセル化(英: encapsulation)とは、対象物をまるでカプセルに入れているみたいに外部から見えなくして、その内容を隠蔽することをいいます。
オブジェクト指向のカプセル化
カプセル化はオブジェクト指向を構成する概念のひとつです。(※オブジェクト指向の3大要素は 継承、ポリモーフィズム(多態性)、カプセル化)
カプセル化によって、オブジェクトの情報(フィールドやメソッドなど)を隠蔽することで、オブジェクトへの直接アクセスを制限することができます。
具体的にはアクセス修飾子を利用して、オブジェクトへのアクセスを制限します。
主なアクセス修飾子は次のとおりです。
アクセス修飾子 | 説明 |
public | 外部からのアクセス可。 |
protected | 外部からのアクセス不可。ただしサブクラスまたは同じパッケージ内のクラスからはアクセスできる。 |
private | 外部からのアクセス不可。内部クラスからのみアクセスできる。 |
次の図は「private」で定義された「関数A」と「public」で定義された「関数B」のイメージ例です。
「private」で定義された「関数A」は、外部からアクセスできません。それに対して「public」で定義された「関数B」は外部からアクセスすることができます。
このようにオブジェクト指向のカプセル化は、アクセス修飾子を用いてオブジェクトの情報(フィールドやメソッドなど)を公開するのか、非公開にするのかを明確に制御します。
カプセル化したオブジェクトをどのレベルまで公開するかを明確にすることで、外部から想定外な使い方をされる心配はなく無駄な障害を防ぐことができます。
通信におけるカプセル化
通信におけるカプセル化は、パケットを別のプロトコルで包んで送受信する際に使用します。
次の図は、通信におけるカプセル化のイメージ例です。元パケットをカプセル化して、別プロトコルのヘッダを新しく付与しています。
このように通信におけるカプセル化は、パケットを別のプロトコルで包んで送受信することをいいます。プロトコルを変換したい場合や、通信の内容を暗号化したい場合などで利用されています。