티스토리 뷰
Java는 싱글톤 패턴을 사용하기 위해 보통 getInstance() 메서드를 따로 구현한다.
하지만, Dart는 이 싱글톤 패턴을 구현해주는 factory라는 키워드를 따로 가지고 있다.
Dart 공식 레퍼런스에서는 factory 키워드를 새로운 인스턴스를 생성하지 않는 생성자를 구현할 때 사용하라고 한다.
바로 한번 확인해보자.
factory 특징
매번 인스턴스를 새로 생성하는 일반적인 constructor와 달리 factory 키워드에는 몇 가지 특징이 있다.
- 기존에 이미 생성된 인스턴스가 있다면 return 하여 재사용한다.
- 하나의 클래스에서 하나의 인스턴스만 생성한다(싱글톤 패턴).
- 서브 클래스 인스턴스를 리턴할 때 사용할 수 있다.
- Factory constructors 에서는 this 에 접근할 수 없다.
어렵게 생각하지 말고, 일단은 Java의 getInstance() 메서드를 재정의하여 사용한다는 개념으로 보면 쉬울 거 같다.
아래와 같이 Dog라는 Class가 있고, 이를 상속한 Labrador, Doberman 클래스가 있다.
class Dog{
String name;
Dog(this.name);
}
class Labrador extends Dog{
Labrador(String name):super(name);
}
class Doberman extends Dog{
Doberman(String name):super(name);
}
조건문을 타고 상황에 따라 다른 인스턴스를 생성하고자 한다면,
void main(List<String> arguments) {
Dog dog;
String name='tommy';
bool isGuardian= false;
if(isGuardian){
dog = Doberman(name);
}
else{
dog = Labrador(name);
}
}
위와 같이 사용할 수 있을 것이다. 그러나, 해당 조건을 다른 메서드나 클래스에서도 사용하고자 한다면? 매번 조건문을 사용하여 인스턴스를 생성하는 것이 아닌 factory 키워드를 사용하여 메서드를 정의하면, 더 간결하게 처리할 수 있게 된다.
void main(List<String> arguments) {
Dog myGaurdDog = Dog.createDog(name:"Rocky",gaurdDog:true);
print(myGaurdDog.runtimeType);
}
class Dog{
String name;
Dog(this.name);
factory Dog.createDog({required String name,bool gaurdDog=false}){
if(gaurdDog){
return Doberman(name);
}
else{
return Labrador(name);
}
}
}
class Labrador extends Dog{
Labrador(String name):super(name);
}
class Doberman extends Dog{
Doberman(String name):super(name);
}
>> Doberman
반응형
'Mobile > Dart' 카테고리의 다른 글
[Dart] Null Safety (0) | 2022.06.27 |
---|---|
[Dart] 비동기 프로그래밍: future, async, await (0) | 2022.06.27 |
[Dart] Extends, Implements, With (0) | 2022.06.26 |
[Dart] Dart 기본 (0) | 2022.06.26 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- 파니노구스토
- redux-thunk
- 인천 구월동 맛집
- react
- javascript
- react-native
- 이탈리안 레스토랑
- 인천 구월동 이탈리안 맛집
- redux
- 정보보안기사 #실기 #정리
- Promise
- AsyncStorage
- 맛집
- Async
- await
- Total
- Today
- Yesterday