1. Singleton Pattern 이란?

특정 용도로 인스턴스를 하나만 생성하여 모든 클레스에서 공유하여 사용하게 하는 디자인 페턴 java Spring에서 의존성 주입에 핵심으로 사용됨. 인스턴스가 한개만 존재한다는 것을 보증하고 싶은 겨우 싱글톤 페턴을 사용하기 도함

DBCP(DataBase Connection Pool)처럼 공통된 객체를 여러개 생성해서 사용해야하는 상황에서 많이 사용 (쓰레드풀, 캐시, 대화상자, 사용자 설정, 레지스트리 설정, 로그 기록 객체등)

Untitled

장점

단점

swift 예시

class UserInfo {
    static let shared = UserInfo()

    var id: String?
    var password: String?
    var name: String?

    private init() { }
}

static 프로퍼티로 인스턴스를 생성한다. 다른 곳에서 init 하는 것을 방지하기 위해 init메소드를 private 처리해준다.

접근

let userInfo = UserInfo.shared

Thared-Safe

여러쓰레드들이 동시에 싱글톤객체를 접근하게 될경우 쓰레드 세이프티 하지 않은 경우 인스턴스가 1개 이상 생성될 수 있는데 과거 objective c 에서는 이를 방지하기 위해 dispatch queue를 이용해서 문제를 해결하였지만 swift에서는 static을 사용해 프로퍼티로 인스턴스를 생성하면, 사용시점에 초기화 되는(lazy)방식으로 싱글톤 인스턴스가 생성되어 싱글톤 인스턴스가 최초 생성되기 전까지 메모리에 올라가지 않기 때문에 Dispatch_once 도 자동적용 된다고 함.