우선, Dart에서의 싱글톤패턴을 어떻게 만드는지 기본형의 코드부터 적어두고 따라가보자.
class CoredataManager {
CoredataManager._privateConstructor();
static final CoredataManager _instance = CoredataManager._privateConstructor();
factory CoredataManager() {
return _instance;
}
}
CoredataManager._privateConstructor();
static final CoredataManager _instance = CoredataManager._privateConstructor();
- 이 두라인은 무얼 의미하는 것일까?
- 이 것은 함수를 호출하는 것이 아닌 비어있는 생성자를 만드는 선언부다.
CoredataManager._privateConstructor() { }
- 이걸 풀어쓰면 위와 같다. 즉, 외부에서 init을 차단해버리는 것이졍
static final CoredataManager _instance = CoredataManager._privateConstructor();
- 이건 뭘까?
- 앞의 경우와 달리 생성자를 호출하는 행위로 호출한 결과의 인스턴스를
_instance
변수에 할당한 것
factory CoredataManager() {
return _instance;
}
- 호출 시, 2에서 할당한
_instance
변수를 반환합니당. - 결국,
CoredataManager();
를 호출 할 때마다 factory에서 같은 인스턴스가 반환되도록 함다.
factory
factory는 새로운 인스턴스를 생성하고 싶지 않을 때 사용하는 생성자이다.
- 기존에 이미 생성된 인스턴스가 있다면 return 하여 재사용.
- 하나의 클래스에서 하나의 인스턴스만 생성.
- 자식클래스 인스턴스를 리턴할 때 사용가능(?)
- Factory Constructors 에선 this에 접근불가
- factory 정확히 이해가안간다 다시 공부해보자.
싱글톤의 장/단점
- 장점1: 고정메모리로 메모리낭비(x), 속도측면이점
- 장점2: 데이터 공유 쉬움
- 단점1: 동시성 문제 발생가능성있음
- 단점2: 테스트 문제
- 단점3: DIP 위배됨