Singleton이란?
싱글톤 패턴은 하나의 프로그램(정확히는 프로세스)에 하나의 인스턴스만을 사용하기 위해 사용한다.
iOS 프로젝트에서는 주로 앱 전반적인 데이터를 저장하고 관리하는 매니저 객체로 많이 사용하게 된다.
C++ 또는 Java 에서도 Singleton 패턴을 많이 사용해왔는데, 보통 Singleton을 아래와 같은 방법으로 만들었을 것이다.
- 생성자를 private 로 만든다
- 내부에 private static 객체를 생성한다
getInstance()
메소드를 만들어서 단 1개의 객체를 생성, 반환하도록 한다
Objective-C 에서는 명시적인 접근지정자가 없으며, thead safe하게 만들기 위해 조금 다른 방식으로 만들게 된다.
주로 sharedInstance
라는 클래스 메소드를 생성하며 GCD를 이용해 thread safe하게 만든다.
@interface YNCSRManager : NSObject
+ (instancetype)sharedInstance;
@end
@implementation YNCSRManager
+ (instancetype)sharedInstance {
static YNCSRManager *shared = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
shared = [[YNCSRManager alloc] init];
});
return shared;
}
@end
위 코드는 너의 이름은.
프로젝트에서 사용한 STT(Speech-To-Text) 역할을 해주는 객체로 Singleton으로 구현했다.
dispatch_once
는 단 1회만 실행한다는 것을 보장하며 완벽히 synchronous
하게 동작한다. 따라서 Thead-Safe 함을 보장받을 수 있다.
sharedInstance
가 처음 호출되면 shared 변수에 YNCSRManager가 할당되고, 두번째 호출부터는 첫번째 호출에서 생성된 shared 변수를 그대로 return 하여 어디서든 동일한 YNCSRManager를 활용한 코딩을 할 수 있다.