0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

1. Getter だけを作るべき時

「値の読み取りは必要だが、変更を許可したくない」場合

主な例

  • イミュータブル(不変)なオブジェクト
    • final フィールドで初期化後に変更不可とする場合
    • 例: java.time.LocalDate のような値オブジェクト
  • 設定後に変更させたくないプロパティ
    • 例: ユーザーID作成日時 など、変更されるべきでないデータ

具体例

public class User {
    private final String id;  // 一度セットされたら変更不可
    private String name;

    public User(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public String getId() {  // Getter だけ
        return id;
    }

    public String getName() {
        return name;
    }

    // Setter を用意しないことで id の変更を防ぐ
}

ポイント:

  • idfinal なのでコンストラクタでのみセット可能
  • idGetter はあるが Setter はなし → 不変性を確保
  • name は変更可能なので Setter を作ることも可能

2. Setter だけを作るべき時

「外部から値の取得を制限し、内部のロジックだけで使用する」場合

主な例

  • 値の取得を許可したくない場合
    • 例: パスワードのようなセンシティブな情報
  • 値を外部に公開したくないが、設定はできる場合
    • 例: API 経由で設定はできるが、内部でのみ利用する値
  • 特定のロジック内でしか値を使わない場合
    • 例: キャッシュの更新フラグ、ログ管理用の変数

具体例

public class SecureUser {
    private String password;  // 外部に公開したくない

    public void setPassword(String password) {
        this.password = password;
    }

    // Getter を作らないことでパスワードの取得を防ぐ
}

ポイント:

  • setPasswordパスワードを設定 できる
  • しかし、getPassword は作らないので 外部からパスワードを取得できない
  • セキュリティ対策として有効

3. Getter と Setter の両方を作るべき時

「自由に値を取得・変更できるべき場合」

主な例

  • 通常のエンティティや DTO
    • 例: UserProduct などの ビジネスデータを持つクラス
  • フォームデータや設定情報
    • 例: 画面からの入力を保持するオブジェクト
  • 特に不変性が必要ない場合
    • 例: キャッシュや一時的な設定を扱うオブジェクト

具体例

public class Product {
    private String name;
    private double price;

    public String getName() {
        return name;
    }

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

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}

ポイント:

  • nameprice自由に取得・変更できる
  • 一般的な データ保持用クラス に適している
  • DTO(Data Transfer Object)や JavaBean では Getter/Setter を両方持つことが多い

まとめ

作成するメソッド 使うべきケース
Getter だけ - 値を変更させたくない(final フィールドなど) - イミュータブルなオブジェクト(User ID作成日時 など)
Setter だけ - センシティブな情報を外部に公開したくない(password など) - 内部ロジックでのみ使う値(ログイン試行回数 など)
Getter & Setter 両方 - 通常のエンティティ(UserProduct など) - 変更可能なオブジェクト(DTO や フォームデータ)

設計のポイント

  • 変更を許可すべきか? → Getter/Setter の有無を決める
  • セキュリティや不変性を考慮する → Getter/Setter を制限する
  • ビジネスルールを考慮する → 必要な操作だけを提供する
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?