Javaのカプセル化



カプセル化(英語: Encapsulation )とは、オブジェクト指向プログラミング手法において、抽象関数インタフェースの実装内容を部分的にパッケージ化して隠蔽する手法を指します。

カプセル化は、外部クラスによって定義されたコードによってクラスのコードとデータがランダムにアクセスされるのを防ぐ保護バリアと考えることができます。

このクラスのコードとデータにアクセスするには、厳密なインターフェイス制御を渡す必要があります。

カプセル化の主な機能は、コードを呼び出すプログラム フラグメントを変更せずに、独自の実装コードを変更できることです。

適切なカプセル化により、プログラム コードの理解と保守が容易になり、プログラム コードのセキュリティも強化されます。

Java カプセル化クラスの例を見てみましょう:

/* 文件名: EncapTest.java */
public class EncapTest{

   private String name;
   private String idNum;
   private int age;

   public int getAge(){
      return age;
   }

   public String getName(){
      return name;
   }

   public String getIdNum(){
      return idNum;
   }

   public void setAge( int newAge){
      age = newAge;
   }

   public void setName(String newName){
      name = newName;
   }

   public void setIdNum( String newId){
      idNum = newId;
   }
}

上記の例では、パブリック メソッドは、外部クラスがこのクラスのメンバー変数にアクセスするための入り口です。

通常、これらのメソッドはゲッター メソッドとセッター メソッドと呼ばれます。

したがって、クラス内のプライベート メンバー変数にアクセスしたいクラスは、これらのゲッター メソッドとセッター メソッドを経由する必要があります。

次の例は、EncapTest クラスの変数にアクセスする方法を示しています:

/* F文件名 : RunEncap.java */
public class RunEncap{

   public static void main(String args[]){
      EncapTest encap = new EncapTest();
      encap.setName("James");
      encap.setAge(20);
      encap.setIdNum("12343ms");

      System.out.print("Name : " + encap.getName()+ 
                             " Age : "+ encap.getAge());
    }
}

上記のコードのコンパイル結果と実行結果は次のとおりです:

Name : James Age : 20