[iOS] 싱글턴(Singleton) in Swift

728x90
반응형

싱글턴(Singleton)에 대해 알아보겠습니다.

 

Singleton패턴이란?

싱글톤 패턴(Singleton Pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 한번만 메모리를 할당하고(Static) 그 메모리에 인스턴스를 만들어 사용합니다.이와 같은 디자인 유형을 싱글톤 패턴이라고 한다.

고정된 메모리 영역을 얻으면서 한번의 인스턴스를 사용하기 때문에 메모리 낭비를 방지할 수 있습니다.

  • 특정 클래스의 인스턴스에 접근할 때 항상 동일한 인스턴스만을 반환하도록 하는 설계 패턴
  • 한 번 생성된 이후에는 프로그램이 종료될 때까지 항상 메모리에 상주
  • 어플리케이션에서 유일하게 하나만 필요한 객체에 사용
  • UIApplication, AppDelegate 등

싱글톤 패턴은 분명 많은 곳에서 활용될 수 있습니다.
하지만 너무 남발할 경우 데이터가 꼬이는 문제가 발생할 확률이 일반적인 구현 방식보다 높기 때문에 적절한 곳에서 활용하는 습관이 필요하다.

/***************************************************
 iOS 싱글톤 사용 예
 ***************************************************/
let screen = UIScreen.main
let userDefaults = UserDefaults.standard
let application = UIApplication.shared
let fileManager = FileManager.default
let notification = NotificationCenter.default

 

Obj-C vs Swift Syntax 비교

Objective-C

@implementation Singleton

+ (instancetype)sharedInstance {
    static Sigleton *sharedManager = nil
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedManager = [[Singleton alloc] init];
    });

    return sharedManager;
}

@end

 

Swift

class Singleton {
  static let shared = Singleton()
  private init() {}
}

Objective-C같은 경우는 safe한 쓰레드를 위해 복잡한 코드를 생성해주어야하는 반면에 Swift는 간단한 코드로 Singleton을 생성 할 수 있습니다.

let으로 선언한 것은 기본적으로 thread-safe 하므로 별도로 dispatch_once_t 불필요하고, static 전역 변수로 선언한 것은 lazy하게 동작하므로 처음 Singleton을 생성하기 전까지 메모리에 올라가지 않습니다.

반응형

'iOS' 카테고리의 다른 글

[iOS] 델리게이트(Delegate)  (0) 2019.07.23
[iOS] UserDefaults  (0) 2019.07.23
[iOS] Code Snippet  (0) 2019.07.23
[iOS] UIViewController개념과 생명주기(Life Cycle)  (0) 2019.07.23
[iOS] iOS UI Guide 개념  (0) 2019.07.23