完全コンストラクタ
不正状態から防護するための設計パターン
NG🙅♀
引数なしのデフォルトコンストラクタで生成し、あとからインスタンス変数に値をセットする
code:java
public class MyClass {
// インスタンス変数
private int intValue;
private String stringValue;
// デフォルトコンストラクタ
public MyClass() {
// 引数なしのデフォルトコンストラクタ
}
// インスタンス変数に値を設定するメソッド
public void setValues(int intValue, String stringValue) {
this.intValue = intValue;
this.stringValue = stringValue;
}
OK🙆♀
code:java
public class Money {
Money(final int amount, final Currency currency) {
// 1. ガード節で不正値を防ぐ
if (amount < 0) {
throw new IllegalArgumentException("金額には0以上を指定してください。");
}
if (currency == null) {
throw new NullPointerException("通貨単位を指定してください。")
}
// 1. コンストラクタで確実に正常値を設定 (生焼けオブジェクトを防ぐ)
this.amount = amount;
this.currency = currency;
}
..
}