工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

Javaカプセル化完全ガイド:実践例で理解するデータ隠蔽とアクセサ

Javaにおけるカプセル化とは

カプセル化はJavaにおけるオブジェクト指向設計の核心柱の一つです。データ(フィールド)とそのデータを操作する操作(メソッド)を単一の自己完結ユニット——クラス——にバンドルします。内部状態を明確に定義されたインターフェースの裏に隠蔽することで、オブジェクトを意図しない干渉から守り、コードの保守性とテスト容易性を高めます。

このチュートリアルで学べること:

動画が見られない場合はこちら

例で学ぶカプセル化

カプセル化を説明するため、入金と残高表示機能を持つシンプルな銀行口座クラスを考えます。

class Account {
    private int accountNumber;
    private int accountBalance;
    public void showData() {
        // データ表示コード
    }
    public void deposit(int amount) {
        if (amount < 0) {
            // エラー表示
        } else {
            accountBalance = accountBalance + amount;
        }
    }
}

悪意ある攻撃者がソースコードにアクセスし、-100の負の入金を注入しようと試みるとします。よくある2つの攻撃経路:

アプローチ1: accountBalanceフィールドを直接変更。フィールドがprivate宣言されているため、Accountクラス外部からアクセス不可で、この攻撃は防がれます。

Javaカプセル化完全ガイド:実践例で理解するデータ隠蔽とアクセサ

ご覧の通り、private修飾子がカプセル化を強制し、内部状態を守っています。

Javaカプセル化完全ガイド:実践例で理解するデータ隠蔽とアクセサ

したがってハッカーは残高を直接改ざんできません。

Javaカプセル化完全ガイド:実践例で理解するデータ隠蔽とアクセサ

アプローチ2: publicなdepositメソッドで負の金額を追加しようとする。メソッド内にゼロ未満を拒否する検証チェックがあり、この試みも阻止されます。

Javaカプセル化完全ガイド:実践例で理解するデータ隠蔽とアクセサ

こうしてカプセル化により、正当な操作のみがオブジェクト状態を変更できることを保証。

Javaカプセル化完全ガイド:実践例で理解するデータ隠蔽とアクセサ

クラス全体がシールドされたカプセルのように振る舞い——データは隠蔽され、やり取りは明確に定義されたメッセージのみを通じて行われます。これがカプセル化の本質です。

Javaカプセル化完全ガイド:実践例で理解するデータ隠蔽とアクセサ

Javaにおけるデータ隠蔽

データ隠蔽とは、クラスの外部からフィールドへの直接アクセスを制限するプラクティスです。Javaではprivateキーワードでこれを強制し、フィールドを他のすべてのクラスから不可視にします。これにより内部表現が不透明になり、依存コードを壊さずに内部を変更可能になります。

継承やユーティリティクラスのために、protectedやpublicといった緩いアクセスレベルが必要な場合もあります。しかしカプセル化はprivateフィールドと制御されたアクセサメソッドの組み合わせを推奨します。

Javaにおけるゲッターとセッターメソッド

ゲッター(アクセサ)とセッター(ミューテータ)は、プライベートフィールドの読み取り・更新のための制御されたインターフェースを提供します。検証、ログ記録、遅延初期化を可能にしながらカプセル化を維持します。

例:

class Account {
    private int accountNumber;
    private int accountBalance;
    // アクセサ
    public int getBalance() {
        return this.accountBalance;
    }
    // ミューテータ
    public void setNumber(int num) {
        this.accountNumber = num;
    }
}

ここではgetBalance()が現在の残高を返し、setNumber()が新しい口座番号を設定します。

抽象化 vs カプセル化

関連は深いですが、抽象化とカプセル化は異なる目的を持ちます:

スマートフォンを例に:複雑な回路はタッチインターフェースの裏にカプセル化され、抽象化は発信やメッセージングといった高水準機能を提供します。

Javaにおけるカプセル化の利点

Java

  1. Javaカプセル化マスター:データ隠蔽の実践ガイド
  2. Java型キャスト完全ガイド:拡大変換から縮小変換まで
  3. Java OOP概念:基礎、実例、利点を徹底解説
  4. Java String.length()メソッド:文字列サイズ取得の実例解説
  5. Java String.charAt()完全解説:構文、戻り値、例外、実例
  6. Java String.contains()メソッド:部分文字列チェックの実践例
  7. Java String.endsWith()マスター:文字列サフィックスチェック実例付き
  8. Java BufferedReader でファイル読み込み:実践ガイドと例
  9. Javaで挿入ソート:わかりやすい例とステップバイステップガイド
  10. Javaで選択ソート:ステップバイステップ例と完全コード
  11. Javaカプセル化完全解説: データ隠蔽・ゲッター/セッター・アクセス制御の実践