[Swift] Singleton Pattern

Updated:

Singleton 패턴이란

  • 애플리케이션에서 단 ‘하나’의 인스턴스만 생성해서 사용하는 디자인 패턴이다.
  • iOS 에서는 URLSession.shared, UserDefaults.standard , FileManager.default 등이 싱글톤 패턴 기반으로 만들어져 있다.

Singleton 객체 생성방법

static let 을 사용하고, 클래스 내부에 pirvate init 을 해서 외부에서 생성할 수 없도록 한다.

class Singleton {
    static let shared = Singleton()
    
    private init() {}
}

Swift에서의 Singleton 객체

  • 타 언어에서 일반적으로 Singleton 객체는 멀티 스레드 환경에 의해 여러 Singleton 객체가 생성될 수 있어 thread-safe 하지 않지만, Swift 에서는 dispatch_once가 자동 적용되기 때문에 단 하나의 싱글톤 객체만이 생성되어 thread-safe 하다.

  • Swift 에서 Singleton 객체는 static 키워드로 선언될 경우 lazy 속성을 그대로 물려받게 됨으로 용할 때 최초로 객체가 생성이 된다. 이는 멀티 스레드 환경에서 동시에 접근되더라도 하나의 객체가 생성됨을 보장한다.

*dispatch_once: App 라이프 사이클에서 단 한번만 실행되도록 보장해 주는 것을 의미하며 Thread Safe을 보장 받기 위해 사용한다.

Singleton 패턴의 장점

  • 메모리에 한번만 할당되기 때문에 메모리 낭비를 줄일 수 있다.
  • 전역적으로 접근하여 사용하기 때문에 데이터 공유와 수정이 쉽다.

Singleton 패턴의 장점

  • private init 을 통해 객체 생성을 막음으로서 Mock 객체를 만들 수 없어 테스트하기에 용이하지 않다
  • SOLID 원칙중 하나인 SRP(Single Responsibility Principle), 이하 “하나의 객체는 하나의 책임을 가져야한다.” 는 원칙을 위반한다. 여러 객체에서 전역적으로 Singleton 객체를 사용하기에 Singleton 객체를 사용하는 여러 객체에 의해 여러 책임을 가질 수 있다.

📝 참고 사이트

Categories:

Updated:

Leave a comment