Language/Swift
iOS - Singleton Pattern
비코딩
2022. 11. 1. 16:14
Singleton Pattern
특정 용도로 객체를 하나만 생성하여, 공용으로 사용하고 싶을 때 사용하는 디자인 유형
= 이 클래스에 대한 Instance는 최초 생성될 때 딱 한번만 생성해서 전역에 두고, 그 이후로는 이 Instance만 접근 가능하게 하는 것
= 한 Instance에 어디 클래스에서든 접근 가능
Singleton Class 만드는 방법
1. static 프로퍼티로 Instance 생성하기
class UserInfo {
static let shared = UserInfo()
var id: String?
var password: String?
var name: String?
}
static을 이용해서 Instance를 저장할 프로퍼티를 하나 생성
2. init 함수 접근제어자를 private로 지정하기
class UserInfo {
static let shared = UserInfo()
var id: String?
var password: String?
var name: String?
private init() { }
}
Init 함수를 호출해 Instance를 또 생성하는 것을 막기 위해 init() 함수 접근 제어자를 private로 지정
Singleton Class 접근하는 방법
아까 생성한 static 프로퍼티를 이용
let userInfo = UserInfo.shared
userInfo.id = "bcd"
Singleton 장점
- Instance를 한 번만 생성하므로 메모리 낭비를 방지
- 자원 공유가 쉬움
- DBCP(Database Connection Pool)처럼 공통된 객체를 여러 개 생성해서 사용하는 상황에서 많이 사용 (스레드풀, 캐시, 대화상자, 사용자 설정, 레지스트리 설정, 로그 기록 객체 등)
Singleton이 쓰이는 곳
let screen = UIScreen.main
let userDefault = UserDefaults.standard
let application = UIApplication.shared
let fileManager = FileManager.default
let notification = NotificationCenter.default