안녕하세요. 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"