[iOS/Swift] アプリ開発の実務的アプローチで学ぶデザインパターン ~Singleton~


この記事シリーズは、iOS/Swiftエンジニアである執筆者個人が、
ごく普通のiOSアプリ開発でよくある状況
Swiftのコアライブラリやフレームワークで使われているパターン
着目してデザインパターンを学び直してみた記録です。

関連記事一覧
[iOS/Swift] アプリ開発の実務的アプローチで学ぶデザインパターン

Singletonパターン概要

  • インスタンスが1個しか生成されないことを保証するためのパターンです。
  • GoFのデザインパターンでは生成に関するパターンに分類されます。

使い所

  • iOSフレームワーク内で随所に使われています。典型例は UIApplication.shared です。
  • 実行時に依存性を変更しづらく、ユニットテストがしにくいというデメリットがあります。
  • またグローバル変数と同様に、いつ・どこから・どのように変更されるのか理解が難しくなりますので、注意しながら利用する必要があります。

サンプルコード

Swiftバージョンは 5.1 です。

class SingletonClass {
    class var shared : SingletonClass {

        struct Static {
            static let instance : SingletonClass = SingletonClass()
        }

        return Static.instance
    }
}

// Usage
let instance = SingletonClass.shared

※少々回りくどい実装になっていますが、マルチスレッドでインスタンスが複数生成されてしまうことを回避するための実装例です。

引用:
https://github.com/07cs07/Design-Patterns-In-Swift