2023. 8. 22. 11:22ㆍiOS
싱글턴 디자인 패턴은 언제 활용하면 좋을까?
- 1.특정 용도로 객체를 하나 생성해서 공용으로 사용하고 싶을 때 사용하는 방법입니다.
- 2.인스턴스가 하나만 존재하는 것을 보증하고 싶은 경우사용(1개의 값으로 여러곳에 쓰이게될때?)
내 프로젝트에 적용한다면 어디에 적용하는게 좋을까?
- 과일의 갯수 변화에 반응하기 위해서 사용하면 좋을꺼같습니다.
- 기존재고를 가지고 있고 주스 주문시에 과일을 감소시킬때 싱글톤패턴을 활용할수 있다고생각됩니다.
- 또한 주소값이 같으므로 남은재고에서 재고 수정을 진행할때 수정사항이 변경될수있게 한다면
- 싱글톤 객체를 만든것으로 여러곳에서 유용하게 쓸수 있을꺼라 생각 합니다.
싱글턴 디자인 패턴의 장점과 단점은 무엇이 있을까?
장점- 한 번 생성된 인스턴스로 계속하여 활용하기 때문에 메모리를 효율적으로 관리할 수 있다.
- 단 하나만 존재하기 때문에 동일한 데이터와 서비스를 다양한 객체에 제공할 수 있다.
- 싱글톤으로 만들어진 클래스의 인스턴스는 전역인스턴스라서 다른클래스에서 데이터공유가 쉽다.
- init함수 접근제어자를 private으로 지정해 또 생성하는 것을 막아준다.
단점
- 단 하나의 데이터를 사용하는 것은 장점이 될 수 있지만, 여러곳에서 동시에 사용하면 인스턴스의 상태관리가 어려워질 수 있다.
- 싱글톤을 활용하는곳이 많다면 유지보수, 확장이 어려울 수 있다.
- 여러곳에서 공유하는 만큼 해당 싱글톤에 기능을 계속 확장하면 단일 책임 원칙에 위배될 수 있다.
코코아터치 프레임워크에서 싱글턴이 활용된 사례는 무엇이 있을까?
- FileManager: 애플리케이션 파일 시스템을 관리하는 클래스 → -FileManager.default
- URLSession: URL 세션을 관리하는 클래스 → URLSession.shared
- NotificationCenter: 등록된 알림의 정보를 사용할 수 있게 해주는 클래스 → NotificationCenter.default
- UserDefaults: key - value 형태로 간단한 데이터를 저장하고 관리할 수 있는 인터페이스를 제공하는 데이터베이스 클래스 → UserDefaults.standard
- UIApplication: iOS에서 실행되는 중앙제어 애플리케이션 객체 → UIApplication.shared
싱글턴 디자인 패턴을 구현할 때는 어떤 방식(열거형, 구조체, 클래스 등)을 활용하여 타입을 구현하는 것이 좋을까? 그 이유는?
- 구조체, 클래스로도 활용 가능하지만 클래스로 구현하는 것이 좋다.
- 싱글톤 인스턴스를 할당할 수도 있기 때문에(구조체로 구현하는 순간 복사하는 것 뿐)
class 사용 예제
class FruitStore {
static var shard = FruitStore()
private init() {}
private var stock: [Fruit: Int] = [
.strawBerry: 25,
.banana: 11,
.pineApple: 12,
.kiwi: 13,
.mango: 14
]
}
- 먼저 객체 안에서 저장 프로퍼티를 선언한다 이후 본인 스스로를 생성한다
- static이라는 메서드를 사용한다.
- 이후 private init(){} 를 통하여 싱글톤의 접근제한을 진행한다.
- 다른곳에서 이제 쓰면 된다.
private var fruitStore: FruitStore = FruitStore.shard
- 다른 화면에서 싱글톤 객체를 불러올때 쓰인다. FruitSore.shard로 써야한다.
복습 스터디를 통하여 추가적인 싱글톤 공부 링크: https://hackmd.io/6qg6chNyTQuNvCM6fc0QdA
'iOS' 카테고리의 다른 글
SOLID (0) | 2023.08.22 |
---|---|
노티피케이션이란 (Notification)? (0) | 2023.08.22 |
MVVM 패턴에 대해서 알아보기 (0) | 2023.01.16 |
RxSwift에 대해 알아보기! (Observable) (0) | 2023.01.11 |
외부 라이브러리 (Cocoa Pods 추가하기) (0) | 2023.01.10 |