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 |