カテゴリ: Javaのカプセル化 更新日: 2026/04/24

Javaのカプセル化を実践しよう!初心者向けにわかりやすくクラス設計を解説

326
Java のカプセル化を実践しよう!シンプルなクラス設計を試す

先生と生徒の会話形式で理解しよう

生徒

「先生、Javaのカプセル化って何ですか?クラスの中で変数を隠すって聞いたんですが…」

先生

「その通り!Javaではカプセル化によってデータを保護し、外部からの不正なアクセスを防げるようになるんですよ。」

生徒

「具体的にどうやってカプセル化するんですか?」

先生

「それでは、Javaのカプセル化を実践しながら、クラス設計の基本を学んでいきましょう!」

1. Javaのカプセル化とは?初心者にもわかりやすく解説

1. Javaのカプセル化とは?初心者にもわかりやすく解説
1. Javaのカプセル化とは?初心者にもわかりやすく解説

Javaのカプセル化(Encapsulation)とは、クラスの内部のデータ(フィールド)を隠蔽し、外部から直接アクセスできないようにする仕組みです。これにより、プログラムの安全性・保守性・拡張性が向上します。

たとえば、ユーザー情報を管理するクラスで「名前」や「年齢」などのフィールドを直接変更されてしまうと、意図しない不正なデータが入ってしまう可能性があります。そこで、privateでフィールドを定義し、publicなgetter/setterメソッドで安全にアクセスするように設計します。

2. Javaのカプセル化を実践する基本手順

2. Javaのカプセル化を実践する基本手順
2. Javaのカプセル化を実践する基本手順

Javaでカプセル化を実践するには、次の3ステップが基本です。

  • フィールドをprivateで定義する
  • 必要に応じてpublicなgetter/setterを作る
  • ビジネスルールはsetterの中で制御する

以下に、実際のコード例を紹介します。


public class User {
    private String name;
    private int age;

    // コンストラクタ
    public User(String name, int age) {
        this.name = name;
        this.setAge(age); // setter経由で初期化
    }

    // getter
    public String getName() {
        return name;
    }

    // setter
    public void setName(String name) {
        this.name = name;
    }

    // getter
    public int getAge() {
        return age;
    }

    // setterにバリデーションロジックを入れる
    public void setAge(int age) {
        if (age >= 0 && age <= 150) {
            this.age = age;
        } else {
            System.out.println("年齢は0〜150の間で指定してください");
        }
    }
}

3. カプセル化のメリットを初心者向けに解説

3. カプセル化のメリットを初心者向けに解説
3. カプセル化のメリットを初心者向けに解説

カプセル化には、次のような大きなメリットがあります。

  • データ保護:不正な値を防止できます。
  • メンテナンス性:内部の変更が外部に影響しにくくなります。
  • 再利用性:クラスを部品化して使い回すのに適しています。
  • 拡張性:将来的な仕様変更にも柔軟に対応できます。

Javaをこれから始める人や、 オブジェクト指向の考え方を基礎から理解したい人には、 定番の入門書がこちらです。

スッキリわかるJava入門 第4版をAmazonで見る

※ Amazon広告リンク

4. カプセル化されたクラスを使ってみよう

4. カプセル化されたクラスを使ってみよう
4. カプセル化されたクラスを使ってみよう

上記のUserクラスを実際に使ってみましょう。インスタンスを作って、値を設定・取得してみます。


public class Main {
    public static void main(String[] args) {
        User user = new User("山田太郎", 25);
        System.out.println("名前:" + user.getName());
        System.out.println("年齢:" + user.getAge());

        // 不正な値を設定してみる
        user.setAge(-5);
        System.out.println("変更後の年齢:" + user.getAge());
    }
}

名前:山田太郎
年齢:25
年齢は0〜150の間で指定してください
変更後の年齢:25

setterでバリデーションを行っているため、不正な年齢(−5)は受け付けられず、元の値が保持されています。

5. setter/getterは本当に必要?カプセル化のバランスを考えよう

5. setter/getterは本当に必要?カプセル化のバランスを考えよう
5. setter/getterは本当に必要?カプセル化のバランスを考えよう

初心者の方によくある疑問が「全てのフィールドにgetter/setterをつけるべき?」という点です。実は必要なものだけ公開するのがベストです。

たとえば、外部から変更されるべきでないフィールドにはsetterを作らないことで、より安全なクラス設計が可能になります。


public class Product {
    private final String id; // 変更不可
    private int stock;

    public Product(String id, int stock) {
        this.id = id;
        this.stock = stock;
    }

    public String getId() {
        return id;
    }

    public int getStock() {
        return stock;
    }

    public void setStock(int stock) {
        if (stock >= 0) {
            this.stock = stock;
        }
    }
}

idフィールドにはsetterが無いため、外部から変更されることはありません。このように設計することで、予期せぬ変更を防ぐことができます。

6. カプセル化とクラス設計のベストプラクティス

6. カプセル化とクラス設計のベストプラクティス
6. カプセル化とクラス設計のベストプラクティス

Javaのカプセル化をより活かすためには、以下のようなクラス設計のベストプラクティスを意識しましょう。

  • 意味のあるフィールド名をつける
  • 初期値はコンストラクタで渡す
  • setterにロジックを入れて入力チェック
  • 本当に必要なものだけ公開
  • 情報を隠すこと=良い設計

これらを守ることで、シンプルでメンテナンスしやすいJavaのクラス設計が可能になります。

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Javaのカプセル化とは具体的にどのような仕組みのことを指すのでしょうか?プログラミング初心者にもわかりやすく教えてください。

Javaのカプセル化(Encapsulation)とは、クラスの内部にある大切なデータ(フィールド)を「カプセル」の中に閉じ込めるように隠し、外部のクラスから直接中身を勝手に書き換えられないようにガードする仕組みのことです。オブジェクト指向プログラミングの四大要素の一つであり、プログラムの安全性を高めるために必須の技術です。具体的には、変数を「private」という鍵をかけた状態にして隠蔽し、中身の確認や変更は「public」なメソッド(getterやsetter)という専用の窓口を通すように設計することを指します。これにより、意図しないデータの書き換えを防ぎ、システム全体の信頼性を向上させることができます。
Javaのカプセル化の一覧へ
新着記事
Flutter
Flutterでのリポジトリパターンの実装例
Flutterでリポジトリパターンを実装する方法を完全解説!初心者向けアーキテクチャ設計入門
Java
Java の Objects クラスを使って null チェックを簡単にする方法
JavaのObjectsクラスの使い方を完全ガイド!nullチェックを簡単・安全に行う方法
Java
Java の UUID クラスを使って一意の識別子を作成する方法
JavaのUUIDクラスの使い方を完全ガイド!初心者でもわかる一意な識別子の作成方法
Java
Java の古い日付クラス(Date, Calendar)と新しい日付 API の違い
JavaのDateとCalendarと新しい日付APIの違いとは?初心者向け完全ガイド
人気記事
Java
Java の Random クラスを使ってランダムな数値を生成する方法
JavaのRandomクラスの使い方を完全ガイド!初心者でもわかる乱数生成
Java
Java の getter メソッドと setter メソッドの使い方
Javaのgetterメソッドとsetterメソッドの使い方を完全ガイド!初心者でもわかるアクセス方法
AWS
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
AWS
【AWS】VPCとは?初心者向けに仕組み・用途・できることをわかりやすく解説
【AWS】VPCとは?初心者向けに仕組み・用途・できることをわかりやすく解説

🔌 USBポート不足を解消

Type-C 1本で拡張。
開発・作業環境を一気に快適に

UGREEN USB-Cハブを見る

※ Amazon広告リンク