遅延初期化とは? わかりやすく解説

遅延読み込み

(遅延初期化 から転送)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/09/18 08:57 UTC 版)

遅延読み込み(ちえんよみこみ、英語: Lazy loading)とは実際にオブジェクトが必要とされたときに後から初期化を行うソフトウェアデザインパターンの一つである。

実装

以下の一般的な4つの遅延読み込みデザインパターンの実装方法がある[1]。これらは利点と欠点を併せ持つ。

  • 遅延初期化(英語: lazy initialization
  • Virtual Proxyパターン
  • Ghost パターン
  • Value Holder パターン

遅延初期化

遅延初期化英語: lazy initialization)とは、オブジェクトやそしてその他の初期化の負荷が高いものの生成を後から行う戦略のことである。

これは初期化完了を示すフラグを持ち、オブジェクトが呼び出されるごとにこのフラグを調べる。初期化が完了されていれば実際のオブジェクトを返す。初期化がまだ行われていない場合はその時点で初期化を行う。マルチスレッドのプログラムでは競合状態を防ぐために初期化完了のフラグは排他制御を行う必要がある。

手続き型言語でこのパターンを用いることは、状態共有に依存する他のプログラミングパターンと同様に、潜在的な危険性を持つ。

lazy factory

デザインパターンの観点では遅延初期化はFactory Method パターンと共に用いられる。これは3つのアイデアの組み合わせである。

  • クラスインスタンスを得るためにファクトリメソッドを利用する(Factory Method パターン
  • インスタンスを連想配列に保存し、これにより次回から同じパラメータで「同じ」インスタンスを得られる(Multiton パターン
  • 初めてオブジェクトが必要とされた時点でインスタンス化を行う(遅延初期化パターン)

コード例

遅延初期化では、オブジェクトはまずnullをセットされる。そしてオブジェクトの要求イベントごとにオブジェクトがnullかを調べ、nullの場合は動的にオブジェクトを生成して要求元に渡す。以下にC#で記述した例を上げる。

private int myWidgetID;
private Widget myWidget = null;
 
public Widget MyWidget 
{
    get 
    {
        if (myWidget == null) 
        {
            myWidget = Widget.Load(myWidgetID);
        }
        
        return myWidget;
    }
}

C# にはnull合体代入演算子??=があるのでこれを用いると以下のように書ける。

private int myWidgetID;
private Widget myWidget = null; 

public Widget MyWidget 
{
   get { return myWidget ??= Widget.Load(myWidgetID); }
}

このメソッドはシンプルな実装であるが戻り値にnullを許容する場合は初期化されていないことを示すために placeholder オブジェクトを利用することもある。

Virtual proxy

Virtual Proxy は実際のオブジェクトと同じインタフェースのオブジェクトである。初めてそのインタフェースのメソッドの一つが呼ばれるとき実際のオブジェクトを読み込み、委譲する。

Ghost

Ghostは部分的な状態[訳語疑問点]で読み込まれるオブジェクトである。これはオブジェクトの識別子しか含まないかもしれないが、そのなかのプロバティに初めてアクセスされた時に読み込みが行われる。

Value holder

Value Holderは遅延読み込みの振る舞いを取り扱う上で汎用性があるオブジェクトである。代表例として、Android開発手法のViewHolderパターンなどがある。

コード例

private ValueHolder<Widget> valueHolder;
 
public Widget MyWidget 
{
    get
    {
        return valueHolder.GetValue();
    }
}

関連項目

参考文献

  1. ^ Martin Fowler, Patterns of Enterprise Application Architecture, Addison-Wesley, 2003, pp.200-214. ISBN 0-321-12742-0.

遅延初期化

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/10/02 16:40 UTC 版)

遅延読み込み」の記事における「遅延初期化」の解説

遅延初期化(英語: lazy initialization)とは、オブジェクトや値そしてその他の初期化負荷が高いものの生成を後から行戦略のことである。 これは初期化完了を示すフラグ持ちオブジェクト呼び出されるごとにこのフラグ調べる。初期化完了されていれば実際オブジェクト返す初期化がまだ行われていない場合その時点で初期化を行う。マルチスレッドプログラムでは競合状態を防ぐために初期化完了フラグ排他制御を行う必要がある手続き型言語でこのパターン用いることは、状態共有依存する他のプログラミングパターンと同様に潜在的な危険性を持つ。

※この「遅延初期化」の解説は、「遅延読み込み」の解説の一部です。
「遅延初期化」を含む「遅延読み込み」の記事については、「遅延読み込み」の概要を参照ください。

ウィキペディア小見出し辞書の「遅延初期化」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「遅延初期化」の関連用語

遅延初期化のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



遅延初期化のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアの遅延読み込み (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaの遅延読み込み (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS