Singletons solve one (and only one) problem.

Resource Contention.

전역 변수 사용이 나쁜(?) 것은 일단은 의존성이 높아지고 (해당 전역변수를 여러군데서 사용한다면)

단일책임원칙(?)(single responsibility principle)을 위반함

코드 결합도가 높아지고

단위 테스트도 어려워진다

결국은 객체 지향을 정면에서 위반하는 패턴이라는 느낌

인자를 전달해서 사용을 안하고 직접 사용해야 하는 경우가 대체 언제일까?

왜 꼭 싱글톤 패턴이어야만 하나?

예로는 로그파일을 든다.

글로벌은 진짜 진짜 안쓰는게 좋다고 배웠고 실제로도 그렇게 느낀다. 그럼에도 불구하고 쓰는 상황은 언제일까.

UserDefault의 경우가 xcode에서 싱글톤 패턴을 쓰는 예시인데, 말 그대로 유저의 디폴트값들을 저장하는 객체라고 생각하면, 앱에서 사용자에 따라지는 디폴트 값들은 단일 싱글톤 객체로 따로 빼서 하나로 관리하는게 오히려 좋을수도 있는거 같다.

How to use

static, private init, shared 키워드를 통해 사용.

class UserInfo {
    static let shared = UserInfo()

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

    private init() { }
}

//A ViewController
let userInfo = UserInfo.shared
userInfo.id = "Sodeul"
//B ViewController
let userInfo = UserInfo.shared
userInfo.password = "123"

언제 사용되나 ?