[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 객체를 사용하는 여러 객체에 의해 여러 책임을 가질 수 있다.
Leave a comment