싱글톤 패턴이란 인스턴스를 하나만 생성하여 어디에서든지 참조할 수 있도록 하는 객체 생성 패턴.
오디오북 앱에서 뮤직 플레이어를 싱글톤으로 하나만 생성하여 재생 관련 메서드들을 처리한 경험이 있는데,
이처럼 앱 내에서 공용으로 사용하고 싶은 기능이나 리소스를 싱글톤으로 만들어 인스턴스를 공유할 수 있고, 여러번 호출하더라도 인스턴스가 처음 생성될 때에만 메모리에 할당되기 때문에 메모리도 절약할 수 있다는 장점이 있다.
싱글톤 패턴이란?
Provide access to a shared resource using a single, shared class instance.
어떤 기능이나 리소스를 앱 내에서 공용으로 사용하고 싶을 때, 해당 인스턴스를 하나만 생성하여 어디에서든지 참조하고 공유할 수 있도록 하는 객체 생성 패턴
싱글톤 왜 사용?
- 인스턴스 공유
: to provide a globally accessible, shared instance of a class
애플리케이션 내 어디서든 하나의 인스턴스를 공용으로 참조하여 공유하기 위해
- 메모리 절약
: 싱글톤을 사용하면 인스턴스가 처음 생성될 때에만 메모리에 할당이 되고, 그 후에 여러번 호출하더라도 해당 인스턴스를 참조만 하기 때문에 메모리가 낭비되지 않음.
사용 예시?
오디오북 앱에서 오디오 플레이어 만들 때 싱글톤으로 만들어서 오디오 재생 관련 메서드들을 처리.
로딩 indicator 팝업
iOS 개발에서 주로 사용하는 싱글톤 패턴의 객체 예시
let screen = UIScreen.main
let userDefaults = UserDefaults.standard
let application = UIApplication.shared
let fileManager = FileManager.default
let notification = NotificationCenter.default
사용 방법?
일반적으로 shared 라는 이름의 상수를 만들어 사용.
static 키워드를 붙임.
이니셜라이저를 private으로 만들어서, 외부에서 생성을 못하게?
class Singleton {
static let shared = Singleton()
}
class Player {
static let shared: Player = {
let instance = Player()
// setup code
return instance
}()
func play() { ... }
}
Player.shared.play()
+ AppDelegate 싱글톤 패턴으로 사용할 때
static let shared = UIApplication.shared.delegate as! AppDelegate
iOS 시스템에서 이미 생성된 AppDelegate 인스턴스를 가져와서 참조(재사용)하므로 앱 전반에 걸쳐 동일한 인스턴스를 사용하게 된다. 이렇게 이미 존재하는 AppDelegate 인스턴스를 참조하는 것이 올바르고 권장되는 방법.
static let shared = AppDelegate()
이런 식으로 AppDelegate 의 새로운 인스턴스를 생성하면, UIApplecation 에 의해 관리되는 AppDelegate와 다른 별개의 객체이므로 중복 생성 및 동일 인스턴스 참조해야하는 경우 문제가 발생할 수 있다.
디자인 패턴이란?
general, reusable solution to a commonly occurring problem within a given context in software design.
특정 컨텍스트 내에서 일반적으로 발생하는 문제를 해결하는 데 사용할 수 있는 재사용 가능한 솔루션.
- Creational patterns 생성 패턴 : 객체 생성
- Structural patterns 구조적 패턴 : 더 큰 구조를 형성하고 새로운 기능 제공 위해 다양한 클래스와 객체를 구성
- Behavioral patterns 행동 패턴 : 객체 간 공통적인 의사 소통 패턴 식별하고 구현
참고 : Wikipedia - software design pattern, gmlwjd - 디자인패턴종류
싱글톤 패턴이란?
디자인 패턴 중, 객체 생성에 관련된 Creational (생성) 패턴의 하나로,
singleton pattern ensure a class has only one instance, and provide a global point of access to it
클래스가 하나의 인스턴스만 갖도록 하고 이에 대한 전역 액세스 지점을 제공
특정 용도로 객체를 하나 생성하여 공용으로 사용하고 싶을 때 사용하는 방법.
이 객체는 임의로 메모리에서 해제해주지 않는 이상 프로그램이 실행되고 끝날 때까지 메모리에 유지된다(?)
참고 :
https://developer.apple.com/documentation/swift/managing-a-shared-resource-using-a-singleton
'Swift iOS 앱 개발 > Swift' 카테고리의 다른 글
[Swift] 객체 간 소통 및 이벤트 전달 Delegate / NotificationCenter / KVO (0) | 2022.12.28 |
---|---|
[Cocoa Design Pattern] KVO: Key-Value Observing (0) | 2022.12.26 |
[Cocoa Design Pattern] Delegation Pattern (0) | 2022.12.22 |
[Swift] Subscripts란? + String은 subscript로 접근이 안되는 이유 (0) | 2022.12.14 |
[Swift] Any와 AnyObject 비교 및 장단점 (0) | 2022.12.10 |