class Person{
String? name;
String? age;
// java의 생성자와 같은 형태
Person(String name, String age){
this.name = name;
this.age = age;
}
// 이렇게 짧게 만들수 있음
Person(this.name, this.age);
}
기본생성자는 Person(’name’, ‘age’)로 순서를 지켜줘야하는 불편함이 있음
class Person{
String? name;
String? age;
Person({this.name, this.age});
}
// 중괄호로 감싸면 이렇게 필드 이름을 지정해서 생성함
class PersonGenerator {
Person p = Person(name: 'name', age: 'age');
}
순서를 지킬 필요가 없고 어떤 필드에 어떤 값을 넣는지 한눈에 보기가 편함
class Person{
String? name;
String? age;
Person.init(this.name, this.age);
}
class PersonGenerator {
Person p = Person.init('name', 'age');
}
생성자에 .init()과 같이 이름을 지정하여 다양한 생성자를 만들수 있음
주로 .fromJson()같은 경우에 사용
슈퍼클래스의 Named Constructor는 서브클래스에 상속되지 않음
class Person {
String? name;
String? age;
Person.fromJson(Map<String, dynamic> map)
: name = map['name'],
age = map['age'];
}
class PersonGenerator {
final Map<String, dynamic> map = {
"name": "name",
"age": "age",
};
PersonGenerator(){
Person p = Person.fromJson(map);
}
}
생성자의 body {}안의 코드가 실행되기 전에 파라미터로 받은 값들로 필드를 초기화 해줄때 사용
class Person {
String? name;
String? age;
Person.fromJson(Map<String, dynamic> map)
: name = map['name'],
age = map['age'];
factory Person.factory(Map<String, dynamic> map){
return Person.fromJson(map);
}
}
class PersonGenerator {
final Map<String, dynamic> map = {
"name": "name",
"age": "age",
};
PersonGenerator(){
Person p = Person.factory(map);
}
}
Use the factory keyword when implementing a constructor that doesn’t always create a new instance of its class. Another use case for factory constructors is initializing a final variable using logic that can’t be handled in the initializer list.
- 공식문서
class Person {
String? name;
String? age;
Person(this.name, this.age);
Person.fromJson(Map<String, dynamic> map)
: name = map['name'],
age = map['age'];
factory Person.factory(Map<String, dynamic> map){
return Person.fromJson(map);
}
factory Person.man(Map<String, dynamic> map){
return Man(map['name'], map['age']);
}
}
class Man extends Person{
Man(String name, String age) : super(name, age);
}
main(){
final Map<String, dynamic> map = {
"name": "name",
"age": "age",
};
Person p1 = Person.man(map);
print(p1);
Person p2 = Person.factory(map);
print(p2);
}
출력결과
Instance of 'Man'
Instance of 'Person'