Swift

[Swift] Singleton에서의 private init()

양밀루 2025. 6. 20. 20:12

✅ private init()의 역할

private initializer는 코드의 다른 부분에서 Settings 클래스 인스턴스를 생성하려고 시도하는 것을 막아줌

class MySingleton {
    static let shared = MySingleton()
    private init() {}  // 👈👈
}
 class UserDefaultsManager {
    static let shared = UserDefaultsManager()
    private init() {}  // 외부 생성 차단
}

// 다른 곳에서:
let manager = UserDefaultsManager()  // ❌ 컴파일 에러!
// 'UserDefaultsManager' initializer is inaccessible due to 'private' protection level

let shared = UserDefaultsManager.shared  // ✅ 유일한 방법

✅ 없을 경우

 

class UserDefaultsManager {
    static let shared = UserDefaultsManager()
    // init() ← 기본적으로 public
}

// 다른 곳에서 이런 일이 가능해짐:
let manager1 = UserDefaultsManager()        // 🚨 새 인스턴스!
let manager2 = UserDefaultsManager()        // 🚨 또 다른 인스턴스!
let shared = UserDefaultsManager.shared    // 기존 shared 인스턴스
// → 총 3개의 서로 다른 인스턴스 존재!

'Swift' 카테고리의 다른 글

[Swift] Result 타입  (1) 2025.06.17
[Swift] Any와 AnyObject  (0) 2025.06.12
[Swift] 캡처리스트와 순환참조  (1) 2025.06.05
[Swift] 고차함수 더 이상 헷갈리지 않기  (0) 2025.06.04
[WWDC] ARC in Swift  (0) 2025.05.30