2026.07.31Java基礎 #12|カプセル化TECH BLOG

Java基礎 #12|カプセル化とは?データを安全に管理する仕組み

この記事でわかること

  • カプセル化とは何か
  • privateを使う理由
  • getter・setterの役割
  • データを安全に管理する方法

前回のおさらい

前回はコンストラクタについて学習しました。

コンストラクタを利用すると、オブジェクトの生成と同時に初期値を設定できることが分かりました。

今回は、オブジェクト指向の重要な考え方の一つであるカプセル化について学んでいきます。


カプセル化とは?

カプセル化とは、データを勝手に変更されないように保護する仕組みです。

例えば、自動車の速度を考えてみましょう。

もし誰でも自由に速度を変更できたら、マイナスの速度やあり得ない速度が設定できてしまいます。

そこで、必要な方法でしかデータを変更できないようにするのがカプセル化です。


カプセル化しない場合

public class Car {

    public int speed;

}
Car car = new Car();

car.speed = -100;

このように、どこからでも自由に値を変更できてしまいます。


privateを使う

そこで利用するのがprivateです。

public class Car {

    private int speed;

}

privateを付けると、クラスの外から直接アクセスできなくなります。


getterとは?

getterは、データを取得するためのメソッドです。

public int getSpeed() {
    return speed;
}

値を確認したいときに利用します。


setterとは?

setterは、データを変更するためのメソッドです。

public void setSpeed(int speed) {
    this.speed = speed;
}

setterを利用することで、データの変更方法を管理できます。


getter・setterを使ってみよう

Carクラス

public class Car {

    private int speed;

    public void setSpeed(int speed) {
        this.speed = speed;
    }

    public int getSpeed() {
        return speed;
    }

}

Mainクラス

public class Main {

    public static void main(String[] args) {

        Car car = new Car();

        car.setSpeed(60);

        System.out.println(car.getSpeed());

    }

}

実行結果

60

setterを使うメリット

setterを利用すると、値のチェックも行えます。

public void setSpeed(int speed) {

    if (speed >= 0) {
        this.speed = speed;
    }

}

このようにすることで、マイナスの速度が設定されるのを防ぐことができます。


よくあるミス

① privateにしたのに直接アクセスする

car.speed = 100;

privateのメンバには直接アクセスできません。

② getter・setterを作り忘れる

privateだけにすると、値の取得や変更ができなくなります。

③ thisを書き忘れる

speed = speed;

引数とフィールドの名前が同じ場合は、thisを使って区別します。


カプセル化のメリット

  • データを安全に管理できる
  • 不正な値を防げる
  • 保守しやすいプログラムになる
  • オブジェクト指向らしい設計になる

まとめ

  • カプセル化はデータを保護する考え方
  • privateで直接アクセスを防ぐ
  • getterで値を取得する
  • setterで値を変更する
  • 安全で保守しやすいプログラムを作れる

次回は、継承について解説します。