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

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入門 第5版を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のクラス設計において、フィールドを変数として直接公開せずに「隠蔽」する必要があるのですか?

フィールドを直接公開してしまうと、外部のプログラムから自由に値を書き換えられてしまうため、プログラムが予期せぬ動作をする原因になります。例えば、ユーザーの年齢を管理するクラスで、年齢フィールドを誰でも触れる状態にしていると、誤って「マイナス5歳」や「2000歳」といった現実的ではない不正なデータが代入されてしまうリスクがあります。カプセル化によってデータを隠蔽し、値を変更するための専用窓口(setter)を用意することで、その窓口の中で「正しい値かどうか」をチェックするロジックを組み込むことができます。このようにデータを保護し、不正なアクセスから守ることが、大規模なシステム開発やチーム開発において非常に重要になります。
Javaのカプセル化の一覧へ
新着記事
Flutter
FlutterでWebアプリをビルドする方法と注意点
FlutterでWebアプリをビルドする方法と注意点を徹底解説【初心者向け】
Flutter
Flutter Web開発の始め方!環境構築と基本の流れ
Flutter Web開発の始め方を完全ガイド!初心者でもわかる環境構築と基本の流れ
Flutter
FlutterのInheritedWidgetとは?仕組みと活用方法
FlutterのInheritedWidgetとは?仕組みと活用方法を初心者向けにやさしく解説
Flutter
Blocパターンの仕組みと導入方法をわかりやすく解説
FlutterのBlocパターンを完全ガイド!初心者でもわかる状態管理と導入方法
人気記事
Flutter
Flutterの開発に必要なもの!パソコン・ツール・OSなど準備まとめ
Flutterの開発に必要なもの!パソコン・ツール・OSなど準備まとめ
Java
Java の Random クラスを使ってランダムな数値を生成する方法
JavaのRandomクラスの使い方を完全ガイド!初心者でもわかる乱数生成
Java
Java の getter メソッドと setter メソッドの使い方
Javaのgetterメソッドとsetterメソッドの使い方を完全ガイド!初心者でもわかるアクセス方法
AWS
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説

🔌 USBポート不足を解消

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

UGREEN USB-Cハブを見る

※ Amazon広告リンク