Dart는 하위 유형 또는 null을 반환할 수 있는 Factory constructors 를 지원합니다. 새로운 인스턴스를 생성하지 않는 생성자를 구현할 때 factory 키워드를 사용한다.
예제 코드를 보며 확인해보자
class IntegerHolder {
IntegerHolder(
);
factory IntegerHolder.fromList(List<int> list) {
if (list.length == 1) {
return IntegerSingle(list[0]);
} else if (list.length == 2) {
return IntegerDouble(list[0], list[1]);
} else if (list.length == 3) {
return IntegerTriple(list[0], list[1], list[2]);
} else {
throw Error();
}
}
}
class IntegerSingle extends IntegerHolder {
final int a;
IntegerSingle(this.a);
}
class IntegerDouble extends IntegerHolder {
final int a;
final int b;
IntegerDouble(this.a, this.b);
}
class IntegerTriple extends IntegerHolder {
final int a;
final int b;
final int c;
IntegerTriple(this.a, this.b, this.c);
}
목록에 하나 의 값이 있는 경우 IntegerSingle. 값으로 생성합니다.
목록에 두 개의 값 이 있는 경우 값을 순서대대로 사용하여 IntegerDouble을만듭니다 .
목록에 세 개의 값 이 있는 경우 값을 순서대대로 사용하여 IntegerTriple을만듭니다 .
그렇지 않으면 Error.
이렇게 만들어진 내용을 class들에게 return되어 연결된 것을 우린 확인할 수 있다.