Singleton Pattern
💡 Singleton Pattern
Singleton Pattern(싱글톤 패턴)이란?
→ 특적 용도로 객체를 하나만 생성하여 공용으로 사용하고 싶을 때 사용하는 디자인 유형
class ItemInfo {
var name: String?
var price: Int?
var description: String?
}
만약, 위 예시처럼 ItemInfo
라는 class
를 각각의 서로 다른 ViewController에서 데이터를 입력받아 저장하고 싶다면 어떻게 해야 할까?
let itemInfo = ItemInfo()
itemInfo.name = "iPhone"
이런 식으로 각각의 ViewController에서 ItemInfo
객체를 만들어 저장하면 될까?
No!
위와 같은 방식으로 데이터를 전달/저장하게 될 경우 해당하는 각 Instance
의 프로퍼티에만 데이터가 저장되게 되는데 그 이유는, 다중 인스턴스가 생성되기 때문이다. 서로 다른 ViewController에서 ItemInfo
의 여러 인스턴스를 생성하면 각 인스턴스는 고유한 속성(name
, price
, description
)을 가지게 되고 이때 한 인스턴스에 대한 변경사항은 타 인스턴스에 영향을 주지 못한다.
우리가 원하는 방식은 이러한 방식이 아닌, 하나의 Instance
에 모든 정보가 저장하길 원하는데 이럴 때 사용하는 것이 바로 Singleton Pattern이다. 싱글톤 패턴을 사용한다면 어떤 클래스에서도 하나의 Instance에 접근이 가능하게 된다.
그렇다면 왜 Singleton Pattern(싱글톤 패턴)을 사용해야 할까?
→ 바로 전역적으로 접근이 가능하기 때문이다. Singleton Pattern은 앱 전체에서 하나의 인스턴스, 즉 단일 인스턴스를 생성하여 어디서든 이 인스턴스에 접근이 가능하도록 한다. 이는 인스턴스를 전달하거나 동일한 객체에 대한 복사본을 만들 필요 없이 데이터, 기능적인 측면에서 공유 및 사용이 수월하도록 해준다. 또 코드의 재사용성이 높아지고 상태유지 관리에도 도움이 된다.
Singleton Pattern 생성하기
1. static
프로퍼티를 사용한 Instance
생성
class ItemInfo {
static let shared = ItemInfo()
var name: String?
var price: Int?
var description: String?
}
2. init
함수 접근 제어자를 private
로 지정
class ItemInfo {
static let shared = ItemInfo()
var name: String?
var price: Int?
var description: String?
private init() { }
}
→ init()
함수 접근 제어자를 private
로 지정함으로써 애플리케이션 어디에서나 단일 인스턴스에 접근할 수 있고, 새로운 인스턴스를 생성하는 것을 방지할 수 있다.