728x90
반응형
factory 키워드는 Dart 언어에서 팩토리 생성자를 정의할 때 사용됩니다. 팩토리 생성자는 클래스의 인스턴스를 생성하는 특별한 방법을 제공하며, 일반 생성자와는 조금 다른 목적을 가지고 있습니다. factory 생성자를 사용하는 이유와 그 기능에 대해 자세히 설명하겠습니다.
1. 팩토리 생성자의 목적
- 인스턴스 재사용: 팩토리 생성자를 사용하면 특정 조건에 따라 클래스의 기존 인스턴스를 반환할 수 있습니다. 이 기능을 사용하여 Singleton(싱글톤) 패턴을 구현할 수 있습니다.
- 다른 타입의 객체 반환: 팩토리 생성자는 클래스의 인스턴스뿐만 아니라 클래스의 서브타입 또는 다른 객체를 반환할 수 있습니다.
- 복잡한 객체 생성 로직 처리: 복잡한 초기화나 객체 생성 로직이 필요한 경우, 팩토리 생성자에서 그 처리를 할 수 있습니다.
2. 팩토리 생성자 문법
팩토리 생성자는 일반 생성자와 달리 클래스의 인스턴스를 직접 생성(new)하지 않고, 특정한 로직을 거쳐서 반환합니다. 문법은 다음과 같습니다:
class ClassName {
factory ClassName() {
// 인스턴스 생성 또는 재사용 로직
return someInstance;
}
}
3. 예제: Singleton 패턴
팩토리 생성자는 주로 Singleton 패턴을 구현할 때 많이 사용됩니다. 아래는 MemoDatabase 클래스에서 싱글톤 패턴을 사용한 예시입니다:
class MemoDatabase {
// 내부에서 사용할 고정된 인스턴스 생성
static final MemoDatabase _instance = MemoDatabase._internal();
// 외부에서 호출할 때 사용하는 팩토리 생성자
factory MemoDatabase() {
return _instance; // 이미 생성된 인스턴스를 반환
}
// 실제 인스턴스 생성에 사용되는 private 생성자
MemoDatabase._internal();
}
코드 설명
- static final MemoDatabase _instance: 클래스 내부에서 사용할 고정된 인스턴스를 생성합니다. 이 인스턴스는 앱이 실행되는 동안 하나만 생성됩니다.
- factory MemoDatabase(): 이 팩토리 생성자는 클래스 외부에서 호출됩니다. 클래스 인스턴스를 생성하지 않고 이미 생성된 _instance를 반환합니다. 이 방식으로 클래스의 인스턴스가 하나만 존재하도록 보장합니다.
- MemoDatabase._internal(): 실제 인스턴스를 생성하는 private 생성자입니다. 이 생성자는 클래스 내부에서만 호출할 수 있으며, 외부에서는 직접 인스턴스를 생성할 수 없습니다.
4. 팩토리 생성자와 일반 생성자의 차이점
- 일반 생성자: 매번 호출할 때마다 새 인스턴스를 생성합니다. 클래스 인스턴스 생성의 기본적인 방법입니다.
- 팩토리 생성자: 호출될 때마다 새로운 인스턴스를 반드시 생성하지 않아도 됩니다. 이미 생성된 인스턴스를 반환하거나 다른 조건에 따라 인스턴스를 다르게 반환할 수 있습니다.
5. 언제 factory를 사용해야 할까?
- Singleton 패턴을 구현하여 클래스의 인스턴스를 하나만 유지하고 싶을 때.
- 클래스의 인스턴스를 생성하기 전에 어떤 로직이나 조건 검사를 해야 할 때.
- 클래스의 서브타입 또는 다른 타입의 객체를 반환해야 할 때.
요약
- factory 생성자는 인스턴스를 매번 새로 생성하는 대신, 인스턴스를 재사용하거나 생성 로직을 커스터마이징하기 위한 특별한 생성자입니다.
- Singleton 패턴을 구현할 때 자주 사용되며, 이를 통해 클래스의 인스턴스가 하나만 생성되고 재사용되도록 할 수 있습니다.
'Category > Dart' 카테고리의 다른 글
| Dart - 널 안전성을 다루기 위한 연산자 ?.와 ?? (0) | 2024.10.31 |
|---|---|
| Dart 언어에서 비동기 프로그래밍을 할 때 사용하는 Future 객체 알아보기 (2) | 2024.09.28 |