Dart 언어는 객체 지향 프로그래밍 언어로, 클래스와 객체를 통해 코드를 구성합니다.
Dart에서 factory 키워드는 객체 생성에 있어 특별한 역할을 합니다. 일반적으로 클래스를 사용하여 객체를 생성할 때는 생성자를 사용하지만, factory 생성자를 사용하면 보다 유연하게 객체를 생성할 수 있습니다.
이번 블로그에서는 Dart의 factory 생성자에 대해 자세히 알아보겠습니다.
1. Factory 생성자란?
factory 생성자는 객체를 생성할 때, 항상 새로운 인스턴스를 반환하는 것이 아니라 이미 존재하는 인스턴스를 반환할 수 있는 생성자입니다. 이를 통해 메모리 관리를 최적화하고, 특정 조건에 따라 다른 객체를 반환할 수 있는 유연성을 제공합니다.
예를 들어, 특정 조건에 따라 동일한 객체를 재사용하거나, 서브클래스를 반환하는 등의 작업을 수행할 수 있습니다.
2. Factory 생성자의 기본 사용법
다음은 Dart에서 factory 생성자를 사용하는 기본적인 예시입니다.
class Singleton {
// Singleton 인스턴스를 저장할 정적 변수
static final Singleton _instance = Singleton._internal();
// Private 생성자
Singleton._internal();
// Factory 생성자
factory Singleton() {
return _instance;
}
}
void main() {
// Singleton 인스턴스를 두 번 생성해도 같은 객체가 반환됨
var s1 = Singleton();
var s2 = Singleton();
print(s1 == s2); // true
}
위 코드에서 Singleton 클래스는 factory 생성자를 사용하여 항상 같은 인스턴스를 반환합니다. _internal이라는 private 생성자를 통해 외부에서 직접 객체를 생성할 수 없도록 하고, factory 생성자는 항상 동일한 인스턴스를 반환합니다.
3. Factory 생성자의 활용 예시
factory 생성자는 다양한 경우에 유용하게 사용할 수 있습니다. 예를 들어, 조건에 따라 서로 다른 객체를 반환하는 상황을 생각해볼 수 있습니다.
class Shape {
final String type;
Shape._(this.type);
factory Shape(String type) {
if (type == 'circle') {
return Shape._('circle');
} else if (type == 'square') {
return Shape._('square');
} else {
throw 'Unknown shape type';
}
}
}
void main() {
var circle = Shape('circle');
var square = Shape('square');
print(circle.type); // circle
print(square.type); // square
}
위 예제에서 Shape 클래스는 factory 생성자를 통해 전달된 매개변수에 따라 다른 타입의 객체를 생성합니다.
이처럼 factory 생성자를 사용하면 다양한 조건에 따라 객체를 쉽게 생성할 수 있습니다.
4. Factory 생성자의 장점
- 메모리 관리: 같은 객체를 여러 번 생성할 필요가 없으므로 메모리 사용을 줄일 수 있습니다.
- 유연성: 특정 조건에 따라 다른 객체를 반환하거나, 서브클래스 인스턴스를 반환하는 것이 가능합니다.
- 정적 메서드처럼 사용 가능: factory 생성자는 객체 생성과 관련된 복잡한 로직을 캡슐화할 수 있습니다.
Dart 언어에서 factory 생성자는 객체 생성의 유연성을 제공하여 메모리 관리와 코드 재사용성을 높입니다.
factory 생성자를 잘 활용하면 복잡한 객체 생성 로직을 간단하게 구현할 수 있습니다.
Dart를 사용하면서 객체 생성에 대한 이해를 높이기 위해 factory 생성자를 적극적으로 활용해보세요!
Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.
'Flutter' 카테고리의 다른 글
플러터에서 위젯 트리란 무엇인가요? (0) | 2024.07.31 |
---|---|
플러터에서 싱글톤 패턴이란 무엇인가요? (0) | 2024.07.30 |
플러터에서 클린 코드 작성 방법 및 원칙 (0) | 2024.07.30 |
플러터에서 Cubit 패키지 사용하기: 심층 가이드 (0) | 2024.07.30 |
플러터에서 BLoC 패턴 사용 방법 및 장단점 (0) | 2024.07.30 |