Java 逆引き集 | 可視性とパッケージ設計 — モジュール分離

Java Java
スポンサーリンク

可視性とパッケージ設計 — モジュール分離

Javaでは アクセス修飾子(public / private / protected / default)パッケージ構造 を組み合わせることで、コードの見通しを良くし、モジュールを分離できます。
「外部に見せる部分」と「内部で隠す部分」を整理するのがポイントです。


可視性(アクセス修飾子)

修飾子アクセス範囲主な用途
publicどこからでもアクセス可能外部API、公開クラス
private同じクラス内のみ内部状態の隠蔽
protected同じクラス+サブクラス+同じパッケージ継承先にだけ公開
default(指定なし)同じパッケージ内のみパッケージ内部のみに限定

👉 原則: 外部に見せる必要がないものは隠す。


パッケージ設計の基本

  • パッケージ: クラスをグループ化する仕組み。package com.example.service; のように宣言。
  • 役割ごとに分ける:
    • model → データ構造
    • service → ビジネスロジック
    • repository → 永続化処理
    • util → ユーティリティ

👉 モジュール分離: 役割ごとにパッケージを分け、外部に公開するクラスだけ public にする。


例題で練習

例題1: パッケージ分割と可視性

// ファイル: com/example/model/User.java
package com.example.model;

public class User {
    private String name; // 外部から直接触れない
    public User(String name) { this.name = name; }
    public String getName() { return name; }
}
Java
// ファイル: com/example/service/UserService.java
package com.example.service;

import com.example.model.User;

public class UserService {
    public void greet(User u) {
        System.out.println("Hello " + u.getName());
    }
}
Java

👉 Userはpublicで外部に公開。フィールドはprivateで隠蔽。


例題2: パッケージ内部だけで使うクラス

// ファイル: com/example/util/Helper.java
package com.example.util;

class Helper { // default(指定なし)
    static void log(String msg) {
        System.out.println("[LOG] " + msg);
    }
}
Java

👉 Helperは同じパッケージ内でしか使えない。外部には見せない。


例題3: protectedで継承先にだけ公開

package com.example.base;

public class Animal {
    protected void speak() { System.out.println("???"); }
}

package com.example.child;

import com.example.base.Animal;

public class Dog extends Animal {
    @Override
    protected void speak() { System.out.println("ワン"); }
}
Java

👉 外部には公開しないが、継承先では利用可能。


テンプレート集

パッケージ宣言

package com.example.module;
Java

公開クラス

public class ClassName { ... }
Java

非公開クラス(パッケージ内限定)

class InternalHelper { ... }
Java

フィールドのカプセル化

private 型 フィールド;
publicgetフィールド() { return フィールド; }
Java

設計の指針

  • 外部API: public クラス+public メソッド。
  • 内部実装: private フィールド、default クラス。
  • 継承用: protected メソッド。
  • パッケージ分離: 役割ごとに整理し、依存方向を一方通行に。

まとめ

  • 可視性: public / private / protected / default を使い分けて「見せる/隠す」を制御。
  • パッケージ設計: 役割ごとに分け、外部に公開するクラスだけ public に。
  • モジュール分離: 内部実装を隠すことで保守性・拡張性が高まる。

👉 練習課題として「ECサイト」を想定し、model に商品クラス、service に注文処理、repository にデータ保存を分けてみると、パッケージ設計の効果が体感できます。

タイトルとURLをコピーしました