Lazy Loadingパターン(怠惰な初期化)

オブジェクト生成に時間が掛かる場合は、コンストラクタの初期化ロジックを
見直すことでパフォーマンスをあげることができる。

例えば以下のオブジェクト生成には対してコストが掛からない。

String message = "hello Lazy Loadingパターン";

当然、以下のように自分でクラスを定義してもコストは掛からない。

例1
class MyTestString {
    private message = "hello Lazy Loadingパターン";
    // コンストラクタ
    public MyTestString() {
    }
}
例2
class MyTestStrinA
    private message;
    // コンストラクタ
    public MyTestString(String message) {
        this.message = message;
    }
}

では、データベース接続が必要な場合はどうだろうか?
例3
class MyTestString {
    private message;
    // コンストラクタ
    public MyTestString(String message) {
        this.message = // データベース接続してmessageの生成
    }
}

どう考えても、接続のコストが掛かるのが分かるだろう。
データベース接続をメソッド実行時にまで遅らせると以下のようになる。
例4
class MyTestString {
    private message;
    // コンストラクタ
    public MyTestString(String message) {
    }
   
    public String getMessage() {
        message = // データベース接続してmessageの生成
        return message;
    }
}
メソッド実行時には、コストが掛かるがコンストラクタには初期化処理がなくなっているため
オブジェクトの生成が早くなるのがわかる。

「必要になるまでその処理を行わない」状態にする事で、負荷分散をしている。
実際にデータベースを接続する事は業務アプリではほとんど無いが分かりやすい例として
取り上げた。ここで重要な点はデータベース接続であるかではなく、負荷分散をどのようにするかである。