IOS April 25, 2018

[Objective-C] GCD를 이용한 싱글톤 객체 생성하기

Words count 1.4k Reading time 1 mins. Read count 0

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를 활용한 코딩을 할 수 있다.

0%