: 특정 용도로 객체를 하나만 생성해서 공용으로 사용하고 싶을 때 사용하는 디자인 패턴이다.
static을 사용하면 lazy한 효과가 있어 처음 사용되는 시점에 초기화 되기 때문에 사용하지 않는다면 메모리에 올라가지 않고 사용하는 시점에 메모리에 올라간다.OCP(Open-Closed Principle)란?
기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계해야한다는 원칙이다. -> 확장에 개방적이고, 수정에는 폐쇄적임
: 여러 쓰레드에서 어떤 객체에 대해 동시에 접근이 이루어져도 프로그램의 동작에 이상이 없는것.
만약 멀티 스레드 환경에서 동시에 싱글톤을 사용하는 경우 인스턴스가 2개 이상 생성되는 Thread Unsafe한 경우가 생길 수 있다.
-> 그러나 swift에서는static let을 선언해서 1회 생성을 보장해 준다.
Class CafeInfo {
}
Class CafeInfo {
static let shared = CafeInfo()
}
Class CafeInfo {
static let shared = CafeInfo()
var name: String?
var location: String?
private init() {}
}
let info = CafeInfo.shared
info.location = "서울시 종로구"
print(info.location) // 옵셔널타입임으로 옵셔널로 출력됨
if let location = info.location {
print(location) // 옵셔널 바인딩
}
