シングルトンパターンとは?
- 多くの記事でシングルトンパターンとは、「インスタンスが1個しか生成されないことを保証したい時に使います。」と記載されていますが、実際には別にデフォルトシングルトンパターンが存在することを知らなかったので、ここにメモを残す。
- まずシングルトンとは基本的には「インスタンスが1個しか生成されないことを保証したい時に使います。」で正しい。
- どんな時に使うかというと通知をハンドリングするためのデリゲートクラスの呼び出しや、メモリを管理するためのクラス呼び出し時などです。シングルトンとは以下のようなものです。
public final class ExampleClass {
static let shared = ExampleClass()
private init() {
/// 適当な処理を記載する。
}
}
- このように記述することで、そのクラスのインスタンスが1個しかプログラム内に生成されないことを保証してくれます。
しかし!
- 時と場合によっては、そのクラスのインスタンスが複数個作られても、問題ない場合がある。
- 簡単にいうと、見せかけのシングルトンだ。
- 例えば、最もわかりやすい例をあげると、UserDefaultsなどがそうである。
UserDefaults.standard.set~
- UserDefaultsを利用する際はこのように記述すると思うが、この
standard
はまさにシングルトンである。しかし、UserDefaults自体は情報をプロジェクト内のどこかのファイルに書き込むため、毎回initしても問題はない。 - このような形式的なシングルトンを
デフォルトシングルトンパターン
と呼ぶ。 - その他にも意図的にこのようなクラスを作成できる。
final public class ExampleClass {
static let `default` = ExampleClass()
public init () {
// 処理を記述
}
}
- この場合、シングルトンのように見えるかもしれないが、実際initをpublicにしているため、別のクラスから初期化も可能となっている。これも
デフォルトシングルトンパターン
である。