dart (flutter) 문법 - factory 키워드.

dart (flutter)에서 지원하는 factory 기능에 대해 정리 합니다. 

* 설명.
 - 생성자는 원래 리턴할 수 없지만, factory 키워드를 사용하면 현재 클래스와 자식 클래스의 인스턴스를 생성자에서 리턴할 수 있게 됩니다.
 - 아래 코드의 주석으로 설명 합니다. 동작과 제한 사항을 알 수 있습니다.


void main(){
animal ani = animal(0); // dog 생성.
print(ani.name); // 초기값 출력.

ani.name = 'test'; // 테스트를 위한 문자열 입력.
print(ani.name);

animal new_ani = animal(0); // 새로운 dog 생성.
print(new_ani.name); // 새로만든 dog의 인스턴스 값을 출력한다.

dog dg = ani as dog; // animal 타입을 dog 타입으로 형변환.
}

class animal {
String name = "animal";

// 이름있는 생성자.
// 생성자가 있어야 factory 기능 사용시 에러가 나지 않는다.
animal._init();

factory animal(int i)
{
if(i == 0 ) {
return dog();
}
else if(i == 1 ) {
return cat();
}
return dog();
}
}

class dog extends animal
{
// 생성자. 부모 클래스의 생성자를 호출해야 에러가 나지 않는다.
dog() : super._init();
String? food;
}
class cat extends animal
{
cat() : super._init();
int? fff;
}


// factory 를 활용한 싱글톤.
class SingletonApp {
static final SingletonApp _instance = SingletonApp._init();
factory SingletonApp() { return _instance; }
SingletonApp._init() {}
}

// 에러가 나는 코드.
// static final SingletonApp 에서 static을 빼면 에러가 난다.
// class SingletonApp2 {
// final SingletonApp2 _instance = SingletonApp2._internal();
// factory SingletonApp2() { return _instance; }
// SingletonApp2._internal() { }
// }

// 에러가 나는 코드.
// SingletonApp3()에서 factory를 빼면 에러가 난다.
// 원래 생성자에서는 리턴할 수 없다.
// class SingletonApp3 {
// static final SingletonApp3 _instance = SingletonApp3._internal();
// SingletonApp3() { return _instance; }
// SingletonApp3._internal() { }
// }


댓글

이 블로그의 인기 게시물

파이썬 vscode에서 자동 코드 정렬. Formatter.

Unity3D git 저장소에 올릴때 필요없는 파일 제외하기. gitignore

플러터(flutter) 개발 참고 사이트들.