싱글톤 패턴
특정 용도로 객체를 1개만 생성
공용으로 사용하고 싶을 때 사용하는 디자인 유형
싱글톤 생성하기
static 프로퍼티로 인스턴스 생성하기
class FruitInfo {
static let shared = FruitInfo()
var name: String?
var count: Int?
}
Init 함수 접근제어자를 private로 하기
▶️ init 함수를 통해 인스턴스 생성을 막기 위함
class FruitInfo {
static let shared = FruitInfo()
var name: String?
var count: Int?
private init() { }
}
싱글톤 접근 하기
어디서든 shared란 static 프로퍼티로 접근하면 된다.
let marketA = FruitInfo.shared
let marketB = FruitInfo.shared
싱글톤 패턴을 적용한 FruitInfo 의 name 프로퍼티에 "apple"이라고 기본값을 할당한 경우
class FruitInfo {
static let shared = FruitInfo()
var name: String? = "apple"
var count: Int?
private init() { }
}
그리고 다시 marketA와 marketB를 출력하면
둘다 "apple"이 출력된다.
print(marketA.name!) // apple
print(marketB.name!) // apple
싱글톤의 장단점
장점
- 한 번의 Instance만 생성하므로 메모리 낭비를 방지할 수 있음
- Singleton Instance는 전역 Instance로 다른 클래스들과 자원 공유가 쉬움
단점
- Singleton Instance가 너무 많은 일을 하거나, 많은 데이터를 공유시킬 경우 다른 클래스의 Instance들 간 결합도가 높아져 "개방=폐쇄" 원칙을 위배함 (객체 지향 설계 원칙 어긋남)