요청한 횟수와 상관없이 동일한 인스턴스를 반환
합니다.클래스의 인스턴스가 하나
만 있을 수 있습니다.과일의 수량을 결정하는 부분에서 과일가게의 객체를 하나만 만들 수 있도록 해주면 과일가게의 타입을 구조체로 변경하고 쥬스메이커를 여러개 만들어도 과일의 수량은 하나로 이어지지 않을까?라고 생각한다.
클래스 싱글톤
class FruitStore {
static let fruitStore = FruitStore()
private var fruitInventory = ["apple": 10]
private init() {}
func reduceFruit(fruit: String) {
guard ((fruitInventory[fruit]? -= 1) != nil) else {
return
}
}
func printFruit() {
print(fruitInventory)
}
}
var juiceMaker1 = FruitStore.fruitStore
juiceMaker1.reduceFruit(fruit: "apple")
juiceMaker1.printFruit() // ["apple": 9]
var juiceMaker2 = FruitStore.fruitStore
juiceMaker2.reduceFruit(fruit: "apple")
juiceMaker2.printFruit() // ["apple": 8]
var juiceMaker3 = juiceMaker2
juiceMaker3.reduceFruit(fruit: "apple")
juiceMaker3.printFruit() // ["apple": 7]
var juiceMaker4 = FruitStore.fruitStore
juiceMaker4.reduceFruit(fruit: "apple")
juiceMaker4.printFruit() // ["apple": 6]
var juiceMaker1 = FruitStore.fruitStore
juiceMaker1.reduceFruit(fruit: "apple")
juiceMaker1.printFruit() // ["apple": 9]
var juiceMaker2 = FruitStore.fruitStore
juiceMaker2.reduceFruit(fruit: "apple")
juiceMaker2.printFruit() // ["apple": 9]
var juiceMaker3 = juiceMaker2
juiceMaker3.reduceFruit(fruit: "apple")
juiceMaker3.printFruit() // ["apple": 8]
var juiceMaker4 = FruitStore.fruitStore
juiceMaker4.reduceFruit(fruit: "apple")
juiceMaker4.printFruit() // ["apple": 9]
FileManager.default
URLSession.shared
NotificationCenter.default
UserDefaults.standard
UIApplication.shared