반응형
Flutter에서 싱글톤 패턴을 사용하는 방법은 보통 특정 클래스의 인스턴스를 하나만 유지하기 위해 사용됩니다. 싱글톤은 앱 전체에서 동일한 인스턴스를 유지할 때 유용하며, 특히 설정값이나 네트워크 클라이언트 등에서 많이 사용됩니다. 아래는 Dart에서 싱글톤 패턴을 구현하는 몇 가지 방법을 소개하겠습니다.
방법 1: 기본적인 싱글톤 패턴
가장 단순한 방식으로 싱글톤을 구현할 수 있습니다. 이 방식에서는 factory
생성자를 사용하여 클래스의 인스턴스를 하나만 생성하도록 합니다.
class Singleton {
// 내부에서 사용할 정적 인스턴스
static final Singleton _instance = Singleton._internal();
// 외부에서 접근할 수 있는 factory 생성자
factory Singleton() {
return _instance;
}
// 프라이빗 생성자
Singleton._internal();
// 싱글톤 클래스의 메서드 및 변수
String data = "Hello, Singleton!";
void printData() {
print(data);
}
}
이제 이 클래스를 사용할 때, 항상 같은 인스턴스를 사용하게 됩니다:
void main() {
var singleton1 = Singleton();
var singleton2 = Singleton();
singleton1.data = "New Data";
singleton1.printData(); // New Data
singleton2.printData(); // New Data (같은 인스턴스를 사용하기 때문)
// 같은 객체임을 확인
print(identical(singleton1, singleton2)); // true
}
방법 2: static
키워드를 사용한 싱글톤 (Lazy Initialization)
때로는 클래스 인스턴스가 실제로 필요할 때까지 초기화되지 않도록 lazy 초기화를 사용할 수도 있습니다. 이를 위해 static
변수를 null
로 두고, 필요한 경우에만 초기화합니다.
class LazySingleton {
// 내부에서 사용할 정적 변수 (초기값 null)
static LazySingleton? _instance;
// 외부에서 접근할 수 있는 factory 생성자
factory LazySingleton() {
_instance ??= LazySingleton._internal();
return _instance!;
}
// 프라이빗 생성자
LazySingleton._internal();
String data = "Lazy Singleton Data";
void printData() {
print(data);
}
}
이제 이 클래스를 사용할 때, 인스턴스가 처음 요청될 때 생성됩니다:
void main() {
var lazySingleton1 = LazySingleton();
var lazySingleton2 = LazySingleton();
lazySingleton1.data = "Updated Lazy Data";
lazySingleton1.printData(); // Updated Lazy Data
lazySingleton2.printData(); // Updated Lazy Data
print(identical(lazySingleton1, lazySingleton2)); // true
}
방법 3: get
메서드를 사용한 싱글톤
다음은 get
메서드를 사용하여 싱글톤 인스턴스를 반환하는 방식입니다. 이는 일반적으로 getter를 통해 인스턴스를 얻도록 합니다.
class GetterSingleton {
static final GetterSingleton _instance = GetterSingleton._internal();
GetterSingleton._internal();
static GetterSingleton get instance => _instance;
String data = "Getter Singleton";
void printData() {
print(data);
}
}
사용 방법은 아래와 같습니다.
void main() {
var getterSingleton1 = GetterSingleton.instance;
var getterSingleton2 = GetterSingleton.instance;
getterSingleton1.data = "Updated Getter Singleton Data";
getterSingleton1.printData(); // Updated Getter Singleton Data
getterSingleton2.printData(); // Updated Getter Singleton Data
print(identical(getterSingleton1, getterSingleton2)); // true
}
정리
이렇게 하면 Flutter/Dart에서 싱글톤 패턴을 구현하는 다양한 방법을 사용할 수 있으며, 주로 상황에 맞는 방식으로 구현하여 코드의 일관성과 효율성을 높일 수 있습니다.
반응형
'[====== Development ======] > Flutter' 카테고리의 다른 글
Flutter - 모델 클래스 생성 및 직력화/역직렬화 간편하게 하는 방법 (0) | 2024.11.20 |
---|---|
Flutter - 여러 버전의 Dark SDK 사용하는 방법 (2) | 2024.11.07 |
안드로이드 디바이스에서 디버깅시 화면이 꺼지지 않도록 유지하는 방법 (0) | 2024.08.03 |
[Flutter] 여러가지 생성자 사용법 (1) | 2024.07.12 |
[Flutter] 자식 Widget에서 부모 Widget 으로 이벤트 전달 (0) | 2024.07.07 |