Singleton은 클래스에 인스턴스가 하나만 있는지 확인하는 동시에 이 인스턴스에 대한 전역 접근 지점을 제공하는 생성 디자인 패턴이다.
Singleton 패턴은 단일 책임 원칙을 위반하여 두 가지 문제를 동시에 해결한다.
작동 방식
객체를 생성했지만 새 객체를 받는 대신 이미 만든 객체를 받게 된다.
생성자 호출은 항상 새 객체를 반환 해야하므로 이 동작은 일반 생성자로 구현할 수 없다.
전역 변수와 마찬가지로 Singleton 패턴을 사용하면 프로그램의 어느 곳에서나 일부 객체에 접근할 수 있다. 다른 코드가 해당 인스턴스를 덮어쓰지 않도록 보호해야 한다.
Singleton의 구현
코드가 Singleton 클래스에 접근할 수 있는 경우 Singleton의 정적 메서드를 호출할 수 있다. 따라서 해당 메서드를 호출할 때마다 항상 동일한 인스턴스가 반환된다.
class SampleSingletonClass {
public static let shared = SampleSingletonClass()
private init() { }
public func save() {
// ....
}
}