본문 바로가기

 𝗔𝗣𝗣𝗟𝗘/CoreData

CoreData - Singleton Pattern

 

 

 

 

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로 지정함으로써 애플리케이션 어디에서나 단일 인스턴스에 접근할 수 있고, 새로운 인스턴스를 생성하는 것을 방지할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 참고한 블로그 

Recent Posts
Visits
Today
Yesterday
Archives
Calendar
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31