thread safety한 싱글톤
Swift Design-Patterns
일반적인 싱글톤 패턴 만드는 방법
final class Singleton {
static let shared: Singleton = Singleton()
private init() { }
}
Java에서는 싱글톤 패턴으로 객체를 thread-safety하게 만들기 위해 다양한 방법들이 존재한다.
synchronized
동기화 키워드를 사용한다. 이 방법은 매번 스레드 환경에서 락이 걸리기 때문에, 부가적인 성능 부하가 발생할 수 있다.- 이른 초기화 사용 일반적인 스위프트의 싱글톤 객체를 만드는 방법과 동일하다. 미리 만든다는 것 자체가 단점이 될 수 있다. 왜냐하면 해당 객체의 인스턴스를 생성하는 비용이 많이 드는데, 사용하지 않게 된다면? 사용 여부와 상관없이 만들기 때문에 불필요한 비용이 발생할 수 있다.
- double checked locking
synchronized
를 내부에서 사용한다. 인스턴스를 필요한 시점에 만들 수 있다. - 내부에 Holder 클래스를 만들어서 초기화 하는 방식. 이것이 현재 자바에서 가장 이점인 방식인 듯 하다.
그러나 스위프트에서는 맨 위에 소개한 코드처럼 이른 초기화로 구현하면 된다. 전역 변수를 사용하여 인스턴스를 생성하면 사용 시점에 초기화가 된다고 한다.
참고 자료
- https://medium.com/@jang.wangsu/swfit-thread-safety-한-싱글톤-사용은-75c43e567acf