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

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のカプセル化の一覧へ
新着記事
FlutterのMVP・MVVMアーキテクチャの違いと使い分け
FlutterのMVP・MVVMアーキテクチャの違いと使い分けを初心者向けに解説!
オニオンアーキテクチャの基本とFlutterでの適用例
オニオンアーキテクチャの基本とFlutterでの適用例を初心者向けに解説
クリーンアーキテクチャとは?Flutterでの導入メリット
クリーンアーキテクチャとは?Flutterでの導入メリットをやさしく解説
【AWS】RDS for Oracleの特徴・できないこと・バージョン・料金まとめ
【AWS】RDS for Oracleの特徴・できないこと・バージョン・料金を初心者向けに徹底解説
人気記事
インスタンスタイプの料金比較と最適な選び方(最新2025年版)
AWSのインスタンスタイプの料金比較と最適な選び方【2025年最新版】
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説

🔌 USBポート不足を解消

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

UGREEN USB-Cハブを見る

※ Amazon広告リンク