Singleton
Singleton이란?
Singleton = Only one instance Available (한번만 만들어서 쓴다! 정도랄까?)
특정 용도로 객체를 하나만 생성하도록 보장하여 사용하는 디자인 패턴
GangOfFour의 디자인 패턴
에서 이야기하고 있는 여러가지 디자인 패턴 중 생성 - Singleton
의 UML 다이어그램이다.
애플 문서의 그림을 보면
- 일반적인 Class는 여러번 호출하여 원하는 갯수만큼의 인스턴스를 얻을 수 있지만,
- 싱글톤 클래스는 애플리케이션이 요청한 횟수와 상관없이 동일한 인스턴스를 반환한다.
- 싱글톤 개체는 해당 클래스의 리소스에 대한 전역 액세스 지점을 제공(Global available) ➡️ 단점으로는 유닛 테스트가 어려워질 수 있겠다.
Cocoa framework
에서 UIKit의 NSFileManager
, NSWorkspace
,
UIKit
에서 UIApplication
및 UIAccelerometer
가 싱글톤으로 사용된다고 한다.
싱글톤 인스턴스를 반환하는 팩토리 메서드의 이름은 규칙에 따라 Shared
+ Class Type
형식
➡️ Cocoa 프레임워크의 예 sharedFileManager
, sharedColorPanel
, sharedWorkspace
🌱 싱글톤 사용 예
|
|
싱글톤 장/단점
장점 | ✅ 한개의 인스턴스만 생성하므로 메모리 낭비를 방지할 수 있음 ✅ Singleton Instance는 전역 Instance로 다른 클래스들과 자원 공유가 쉬움 ✅ 인스턴스가 1개라는 것을 보증받는다 (Thread Safe) |
---|---|
단점 | ✅ 인스턴스가 너무 많은 일을 하거나, 많은 데이터를 공유하면 Instance들 간 결합도가 높아져 개방-폐쇄 원칙(OCP, Open-Closed Principle) 을 위배할 수 있음(의존성을 만들어 낸다) ➡️ Unit 테스트가 어려워 질 수 있음 |
Shared Class Type
static
을 사용하여 싱글톤을 생성할 수 있다
|
|
초기화 이외의 추가 설정을 해야 하는 경우, 클로저 호출 결과를 전역 상수에 할당할 수 있다.
|
|
✅ ochococo
깃허브에 올라와 있는 swift 싱글톤 예제
|
|
Reference
Apple - Singleton
Managing a Shared Resource Using a Singleton
Learn iOS Singletons
Design-Patterns-In-Swift - Singleton
소들이 블로그 - 싱글톤 패턴