싱글톤 패턴은 클래스의 인스턴스를 하나만 생성하도록 보장하며, 어디서든 동일한 인스턴스에 접근할 수 있게 하는 디자인 패턴이다. Swift에서 싱글톤은 주로 앱 내에서 공유되는 객체(예: 설정 관리, 네트워크 관리, 데이터 캐싱 등)를 구현할 때 사용된다.
Swift에서 싱글톤을 구현하는 방법으로 보통 static
키워드를 사용한다.
class SingletonExample {
// 전역에서 접근 가능한 유일한 인스턴스
static let shared = SingletonExample()
// 외부에서 인스턴스를 생성하지 못하도록 private initializer 사용
private init() {}
// 예시 메서드
func doSomething() {
print("Singleton instance is working!")
}
}
// 사용법
SingletonExample.shared.doSomething()
NotificationCenter는 이벤트 기반 메시지 전달 시스템으로, 앱 내에서 객체 간의 느슨한 결합(loose coupling)을 유지하면서 통신을 가능하게 한다. 특정 이벤트가 발생했을 때 관련된 모든 객체에 알림을 전달한다.
알림 정의:
알림 이름을 Notification.Name
으로 정의한다.
extension Notification.Name {
static let didReceiveData = Notification.Name("didReceiveData")
}
알림 보내기 (Post Notification):
NotificationCenter.default.post(name: .didReceiveData, object: nil, userInfo: ["data": "Hello, World!"])
알림 등록 (Add Observer):
NotificationCenter.default.addObserver(self,
selector: #selector(handleDataNotification(_:)),
name: .didReceiveData,
object: nil)
알림 처리 (Handle Notification):
@objc func handleDataNotification(_ notification: Notification) {
if let data = notification.userInfo?["data"] as? String {
print("Received data: \(data)")
}
}
옵저버 제거 (Remove Observer):
옵저버는 메모리 관리 차원에서 제거해야 한다.
NotificationCenter.default.removeObserver(self, name: .didReceiveData, object: nil)
Notification Center를 사용할 때 이벤트를 관리하기 위한 중심 객체를 싱글톤으로 구현하는 경우가 많다. 예를 들어:
class EventManager {
static let shared = EventManager()
private init() {}
func postEvent() {
NotificationCenter.default.post(name: .didReceiveData, object: nil, userInfo: ["data": "Event data"])
}
}
위와 같이 구현하면 EventManager.shared
를 통해 알림을 관리할 수 있다.