Javaのカプセル化(Encapsulation)
データと関連するメソッドをまとめてデータの隠蔽と保護を実現しマス。
Javaプログラミングのカプセル化とは、クラスのフィールドやメソッドを外部から直接アクセスできないようにすることで、データの安全性と保守性を高める手法です。
カプセル化の目的
カプセル化の主な目的は、データの隠蔽とデータの保護です。
データの隠蔽は、データに対する直接のアクセスを制限し、データを非公開にします。
データの保護は、データが誤った値に変更されることを防ぎ、正当な方法でのみアクセスできるようにします。
カプセル化の方法
カプセル化を行うには、以下の手順で行います。
- プライベートフィールド(Private Fields)
データをプライベートなフィールドとして宣言し、外部からの直接アクセスを制限します。 - ゲッターメソッド(Getter Methods)
データにアクセスするための公開されたメソッドを提供します。
通常、これはデータの値を取得するメソッドです。 - セッターメソッド(Setter Methods)
データを設定するためのメソッドを提供します。
通常、これはデータの値を設定するメソッドです。
カプセル化の例
下記のコードは、カプセル化されていないクラスとカプセル化されたクラスの違いを説明するためのコードです。
// カプセル化されていないクラス
class Person {
public String name;
public int age;
}
//------------------------
// カプセル化されたクラス
class Person {
// プライベートフィールド
private String name;
private int age;
// ゲッターメソッド
public String getName() {
return name;
}
// セッターメソッド
public void setName(String name) {
this.name = name;
}
// ゲッターメソッド
public int getAge() {
return age;
}
// セッターメソッド
public void setAge(int age) {
this.age = age;
}
}
//------------------------
// カプセル化されていないクラスの使用例
Person person = new Person();
person.name = "Real";
person.age = 54;
// カプセル化されたクラスの使用例
Person person = new Person();
person.setName("Real");
person.setAge(54);
System.out.println(person.getName());
System.out.println(person.getAge());
カプセル化されていないクラス
カプセル化されていないクラスでは、フィールドがpublicに宣言されているため、外部から直接アクセスできます。
// カプセル化されていないクラス
class Person {
public String name;
public int age;
}
// カプセル化されていないクラスの使用例
Person person = new Person();
person.name = "Real";
person.age = 54;
上記のコードでは、person
オブジェクトのname
フィールドとage
フィールドを直接変更しています。
カプセル化されたクラス
カプセル化されたクラスでは、フィールドがprivateに宣言されているため、外部から直接アクセスできません。
フィールドにアクセスするには、getterメソッドとsetterメソッドを使用する必要があります。
// カプセル化されたクラス
class Person {
// プライベートフィールド
private String name;
private int age;
// ゲッターメソッド
public String getName() {
return name;
}
// セッターメソッド
public void setName(String name) {
this.name = name;
}
// ゲッターメソッド
public int getAge() {
return age;
}
// セッターメソッド
public void setAge(int age) {
this.age = age;
}
}
// カプセル化されたクラスの使用例
Person person = new Person();
person.setName("Real");
person.setAge(54);
System.out.println(person.getName());
System.out.println(person.getAge());
上記のコードでは、person
オブジェクトのname
フィールドとage
フィールドにアクセスするために、getterメソッドとsetterメソッドを使用しています。
まとめ
カプセル化されていないクラスは、外部から直接フィールドにアクセスできるため、不正なアクセスやデータの破損などのリスクがあります。
一方、カプセル化されたクラスは、getterメソッドとsetterメソッドを使用することで、外部からのアクセスを制限できるため、安全性が向上します。
getterメソッドとsetterメソッドが、門番になってくれる感じだね。