swift design pattern
31 Dec 2018 | swift design pattern싱글턴
언제 쓰나요?
하나 이상의 인스턴스를 만들때 문제가 생긴다면 싱글턴을 써볼만합니다.
싱글턴의 기본
가장 간단한 생성방법은 다음과 같습니다.
public class MySingleton {
static let shared = MySingleton()
private init() { } // 추가로 인스턴스 생성을 방지케하기 위함입니다.
}
싱글턴을 두번 이상 생성하려면 아래처럼 에러가 발생합니다.
그리
여기서 혹시…init()에 private를 적지 않는다면? 궁금하신 분들은 위해 해보죠~
public class MySingleton {
static let shared = MySingleton()
init() { } // private가 아님.
}
결과를 볼까요?
let mySingleton = MySingleton.shared
let mySingleton2 = MySingleton() // 아무 이상없습니다. 컴파일 성공합니다.
즉 여러 인스턴스를 만들어도 아무 문제 없습니다. 대신 이렇게 하면 싱글턴이 일까요? 아닐까요?
자 다음을 봅시다.
let defaultFileManager = FileManager.default
let customFileManager = FileManager()
이 처럼 FileManager는 분명 싱글턴으로 사용할 수 있는데, 이상하게도 별도의 인스턴스를 또 만들 수 있습니다.
위 같은 패턴을 싱글턴 플러스 패턴
이라고 한답니다. 왜 필요한지는 정확히 모르겠네요 @.@.
싱글턴의 단점
싱글턴은 상태값을 저장하고 있기 때문에, 순서가 다르면 결과도 다르게 됩니다. Unit Test 같은 것을 할 때 취약합니다.
정리
여기까지가 singleton 의 기초입니다. 그럼 다음 시간에 만나요~
Comments