Javaのカプセル化

カプセル化を使ったソースコード

生徒
生徒

教授?
Javaのカプセル化って何ですか?

教授
教授

ふむふむ。
次のようになりますよ?

// Personクラス
public class Person {
  // privateなデータメンバー
  private String name;
  private int age;

  // publicなsetterメソッド
  public void setName(String name) {
    this.name = name;
  }

  public void setAge(int age) {
    this.age = age;
  }

  // publicなgetterメソッド
  public String getName() {
    return name;
  }

  public int getAge() {
    return age;
  }
}

// メインクラス
public class Main {
  public static void main(String[] args) {
    // Personオブジェクトを作成
    Person p = new Person();
    // setterメソッドでデータを設定
    p.setName("kyoujyu");
    p.setAge(365);
    // getterメソッドでデータを取得
    System.out.println("Name: " + p.getName());
    System.out.println("Age: " + p.getAge());
  }
}
教授
教授

クラスのデータメンバーがprivateになっていると、他のクラスからアクセスできませんが、セッターメソッドとゲッターメソッドを使うと、他のクラスからデータを設定することができます。

生徒
生徒

そのカプセル化を使わないと、どのようなデメリットがあるのですか?

教授
教授

カプセル化を使わない場合、次のような問題が発生する可能性がありますよ?

・データの安全性が低下します。
publicなデータフィールドは、外部から自由にアクセスや変更ができるため、不正な値や操作によってデータが破損する恐れがあります。
・モジュール性や保守性が低下します。
publicなデータフィールドは、クラスの実装に依存するため、実装を変更するときに他のクラスやメソッドに影響を与える可能性があります。カプセル化を使うと、実装の詳細を隠して、インターフェースを提供することで、実装の変更に柔軟に対応できます。

セッターとコンストラクター

生徒
生徒

セッターって、コンストラクターとは違うのですか?

教授
教授

ふむふむ。
次のようになりますよ?

// Personクラス
public class Person {
  // privateなデータフィールド
  private String name;
  private int age;

  // コンストラクター
  public Person(String name, int age) {
    this.name = name;
    this.age = age;
  }

  // セッターメソッド
  public void setName(String name) {
    this.name = name;
  }

  public void setAge(int age) {
    this.age = age;
  }
}

// メインクラス
public class Main {
  public static void main(String[] args) {
    // コンストラクターでPersonオブジェクトを作成
    Person p = new Person("kyoujyu", 365);
    // セッターメソッドでデータフィールドの値を変更
    p.setName("seito");
    p.setAge(21);
  }
}
生徒
生徒

へぇー。
さっきのコードとは、少し違いますね。

教授
教授

コンストラクターは、インスタンスを生成するときに呼び出される特別なメソッドです。
クラス名と同じ名前を持ち、戻り値の型を指定しませんよ?
インスタンスの初期化や必須なパラメータの設定に使われます。

セッターは、インスタンスが生成された後に呼び出される通常のメソッドです。
任意の名前を持ち、戻り値の型を指定できます。
インスタンスのデータフィールドの値を変更するために使われます。

生徒
生徒

なんだか、分かったような分からないようなです……。

教授
教授

問題ありませんよ?
さあ、おミカンでも食べていきなさい。

生徒
生徒

あ、あの?
そのにょろにょろしたのがミカンなんでしょうか?
安全ですか?

教授
教授

これは、タコさんミカンちゃんですよ?

生徒
生徒

ちっちゃな手で器用に包丁を使って、ヘンなものを作るのはやめてください。

タイトルとURLをコピーしました