정의
- 특정 용도로 객체를 하나만 생성하여, 공용으로 사용하고 싶을 때 사용하는 디자인 패턴
- 특정 클래스에 인스턴스를 Singleton Pattern으로 사용한다면 최초 생성될 때 한 번만 생성해서 전역으로 두고, 그 이후로는 이 인스턴스만 접근 가능하게 하는 것
- 즉, 하나의 인스턴스에 어떠한 클래스든 접근 가능하게 하는 것
Singleton Class 생성 방법
static 프로퍼티로 인스턴스 생성하기
class UserInfo{
static let shared = UserInfo()
var id: String?
var password: String?
var name: String?
}
init 함수 접근제어자를 private로 지정하기
- 혹시라도 init 함수를 호출해 인스턴스가 다시 생성되는 것을 방지하기 위해, init( ) 함수 접근 제어자를 private로 지정해주는 것
class UserInfo{
static let shared = UserInfo()
var id: String?
var password: String?
var name: String?
private init() {}
}
접근 방법
- static 프로퍼티를 사용해, 어느 클래스에서든 공유할 수 있다.
// A ViewController
let UserInfo = UserInfo.shared
UserInfo.id = "Bokes"
// B ViewController
let UserInfo = UserInfo.shared
UserInfo.password = "123"
// C ViewController
let UserInfo = UserInfo.shared
UserInfo.name = "David"
장단점
장점
- 한 번의 인스턴스만 생성하므로 메모리 낭비를 방지할 수 있다.
- 싱글턴 인스턴스는 전역 인스턴스로 다른 클래스들과 자원 공유하기 쉽다.
- DBCP(DataBase Connection Pool)처럼 공통된 객체를 여러 개 생성해서 사용해야 하는 상황에서 자주 사용된다. (ex. 쓰레드풀, 캐시, 대화 상자, 사용자 설정, 레지스트리 설정, 로그 기록 객체, 등,,)
단점
- 싱글턴 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유하게 될 경우 다른 클래스의 인스턴스들 간 결합도가 높아져 "개방=폐쇄" 원칙을 위배한다. -> 객체 지향 설계 원칙에 어긋나는 행위
- 그 결과로 수정과 테스트가 어려워진다.
Singleton 사용되는 기능
let screen = UIScreen.main
let userDefault = UserDefaults.standard
let application = UIApplication.shared
let fileManager = FileManager.default
let notification = NotificationCenter.default
내용 출처
https://babbab2.tistory.com/66
Swift) 싱글톤 패턴(Singleton Pattern)
안녕하세요 :) 소들입니다 이번 포스팅에선 싱글톤 패턴이 무엇이고, Swift에선 어떻게 사용되는지에 대해 알아보려고 해요!!! 왜 네트워크 하다가 갑자기 SingleTon이냐 하면 내 마음임 모든 포스팅
babbab2.tistory.com
'iOS > iOS' 카테고리의 다른 글
GCD [ Grand Central Dispatch ] (0) | 2022.03.24 |
---|---|
Convenience init (0) | 2022.03.23 |
COW (0) | 2022.03.21 |
defer (0) | 2022.03.18 |
mutating (0) | 2022.03.17 |
댓글