싱글톤 패턴은 객체의 인스턴스를 단 하나만 생성하여, 어디서든 접근할 수 있도록 공유된 인스턴스를 제공하는 디자인 패턴이다. 앱 전체에서 공통적으로 사용하는 리소스를 관리하거나 상태를 공유할 때 유용하게 사용된다.
클래스의 인스턴스를 단 하나만 생성함.
프로그램 어디서든 해당 인트턴스에 접근할 수 있다.
인스턴스는 필요할 때 초기화되며, 초기화는 한 번만 이루어진다.
네트워크 매니저, 데이터베이스 연결 객체, 파일 시스템 접근 관리 등
사용자 세션, 앱의 설정 값, 캐시 데이터 관리 등
동일 데이터를 여러 번 로드하거나 객체를 반복 생성하는 대신 단일 객체로 공유
class Singleton {
static let shared = Singleton()
private init() {
// 초기화 코드
}
}
static let shared
: 전역으로 접근 가능한 공유 인스턴스private init()
: 외부에서 직접 인스턴스를 생성하지 못하도록 생성자를 private
로 선언class Singleton {
static let shared: Singleton = {
let instance = Singleton()
// 추가 설정
return instance
}()
private init() {
// 초기화 코드
}
}
Swift의 static let
은 스레드 안전을 기본적으로 보장한다. 그래서 싱글톤이 여러 스레드에서 동시에 접근되어도 문제가 없다.
class NetworkManager {
static let shared = NetworkManager()
private init() {}
func fetchData(from url: String) {
// 네트워크 요청 처리
}
}
// 사용
NetworkManager.shared.fetchData(from: "https://example.com")
싱글톤을 과도하게 사용하면 코드가 복잡해지고 테스트가 어려워질 수 있다. 필요 이상으로 전역 상태를 공유하지 않도록 주의해야 한다.
싱글톤의 글로벌 접근성은 편리하지만, 의존성을 명확히 하기 위해 일부 경우에는 싱글톤 대신 의존성 주입(Dependency Injection)을 사용하는 것이 더 나을 수도 있다.
싱글톤은 애플리케이션 전체에서 공통적으로 사용하는 리소스를 관리하기 위한 강력한 도구다. Swift에서는 static let
을 사용해 간단하고 스레드 안전하게 구현할 수 있다. 다만, 과도한 사용은 피하고 필요할 때 적절히 활용하는 것이 중요하다.