안녕하세요. narvis2 입니다.
이번시간에는 Swift에서 Singleton 패턴을 사용하는 법에 대하여 알아보도록 하겠습니다.
🍀 Singleton
- Kotlin의
compainion object와 유사함 - 👍 장점
- 단 한번의
instance만 새성하므로 메모리 낭비를 방지할 수 있음 Singleton instance는 전역instance로 다른 클래스들과 자원 공유 가 쉬움DBCP(Database Connection Pool)처럼 공통된 객체를 여러개 생성해서 사용해야하는 상황에서 많이 사용Thread Pool,Cache,대화상자,사용자 설정,Registry 설정,Log 기록 객체등..
- 단 한번의
- 👎 단점
Singleton Instance가 너무 많은 일을 하거나, 많은 데이터를 공유시킬 경우 다른 클래스의Instance들 간 결합도가 높아져개방=폐쇄원칙을 위배함(객체 지향 설계 원칙에 어긋남)- 따라서 유지 보수 측면에서 어려워짐
- 수정과 Test가 어려워짐
☘️ Swift 에서 Singleton 사용
Static을 사용해Type Property로Instance를 생성하면, 사용 시점에 초기화(Lazy) 가 되기 때문에Singleton Instance가 최소 생성되기 전까진 메모리에 올라가지 않고,Dispatch_once도 자동 적용됨- ✅ 별도의 코드 없이
Instance가 여러 개 생성되지 않는,Thread-Safe한 방법이 됨
- ✅ 별도의 코드 없이
- 혹시라도
init()을 호출하여Instance를 또 생성하는 것을 막기 위해init()함수 접근 제어자를private로 지정
예제 👇
1
2
3
4
5
6
7
8
9
10
11
12
class UserInfo {
static let shared = UserInfo()
var id: String?
var password: String?
var name: String?
private init() {}
}
let userInfo = UserInfo.shared
userInfo.id = "YoungJun"