일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- SwiftUI
- OpenAI
- factory
- dart
- network
- singleton
- EventLoop
- philipshue
- 문법
- AppleDeveloper
- isolate
- tuist
- iot
- WWDC24
- GIT
- Xcode
- weatherkit
- dartz
- Architecture
- SampleApp
- designpattern
- flutter
- state
- WiFi
- builder
- uikit
- Adapter
- swift
- concurrency
- LifeCycle
Archives
- Today
- Total
Jaebi의 Binary는 호남선
Creational Patterns - Singleton 본문
목차
Singleton
- 클래스는 오직 하나의 instance를 가지고 있고 전역적인 접근을 제공함
- 클래스 자체가 자기의 유일한 instance의 접근 방식을 관리 + 다른 인스턴스가 생성되지 않도록 함
- 동기: 시스템에 프린터가 많이 있어도 프린터 스풀은 하나, 한 회사에서는 하나의 회계 시스템 운영
- 활용성:
- 클래스의 인스턴스가 오직 하나여야 함을 보장
- 모든 사용자가 접근 할 수 있음
- 유일한 인스턴스가 서브클래싱으로 확장되어야 함
- 코드 수정 필요 없이 서브클래스의 인스턴스 사용 가능
- 사용:
- 클래스 인스턴스를 생성하는데 비용이 큼 - 인스턴스 생성에 외부 소스에서 데이터를 많이 가져와야하는 경우
- 코드 전체에서 동일한 객체에 게속 접근을 해야할 경우 (e.g. logger)
- 일종의 캐싱 계층이 필요할 경우 - 인스턴스 요청에서 캐시를 확인하고 관리 할 수 있음
- 구조:
- Singleton: static Instance()를 정의하여 유일한 인스턴스로 접근할수 있도록 함, 유일한 인스턴스를 생성하는 책임을 맡음
- 클래스 생성자는 private 임으로 클래스 외부에서 인스턴스 생성을 막음
- 장점:
- Singleton 클래스 자체가 인스턴스를 캡슐화하여 사용자가 언제, 어떻게 인스턴스에 접근할 수 있는지 제어
- Name space를 좁힘
- Singleton 클래스는 상속될 수 있어, 상속된 서브클래스를 통해 새로운 인스턴스 생성가능 → 런타임에 필요한 인스턴스를 써서 응용프로그램을 구성 가능
- Sample Code:
class Singleton {
// Private static instance
static final Singleton _instance = Singleton._privateConstructor();
static String _name = 'Jaehwi';
// Private constructor
Singleton._privateConstructor();
// Public static method to access the instance
static Singleton get instance => _instance;
void printName() {
print(_name);
}
void setName(String newName) {
_name = newName;
}
}
void main() {
var instance1 = Singleton.instance;
var instance2 = Singleton.instance;
instance1.printName();
instance2.printName();
instance1.setName('Hwijae');
instance1.printName();
instance2.printName();
}
'공부' 카테고리의 다른 글
Structural Patterns - Adapter (0) | 2024.06.01 |
---|---|
Creational Patterns - Factory Method (0) | 2024.06.01 |
Creational Patterns - Builder (0) | 2024.06.01 |
Design Pattern (0) | 2024.06.01 |
Mobile Clean Architecture (0) | 2024.06.01 |