앱 개발시 생성자에 대한 지식이 부족한것 같아 Dart의 다양한 생성자들을 공부해보고자 함.
Default 생성되는 생성자
class Person {
Person(){}
}
이름이 부여된 생성자
자바에서 생성자 오버라이딩과 비슷한 개념일듯(뇌피셜)
class Person {
//이름있는 생성자 선언시 기본 생성자는 필수 생성
Person(){}
Person.init(){}
}
생성자의 구현부가 실행되기 전에 인스턴스 변수를 초기화
class Person {
String name;
Person() : name = "realyoungk" {
print('My name is $name');
}
}
구현부를 메인 생성자에게 위임하는 생성자
class Person {
String name;
int age;
Person(this.name, this.age){
print('$name, $age');
}
Person.init(String name) : this(name, 20);
}
변하지 않는 객체를 생성한다
변수는 모두 final이여야 한다
class Person {
final String name;
final int age;
const Person(this.name, this.age);
}
main(){
Person p1 = const Person('kim', 20);
Person p2 = const Person('kim', 20);
Person p3 = Person('kim', 20);
Person p4 = Person('kim', 20);
print(identical(p1, p2)); // true
print(identical(p2, p3)); // false
print(identical(p3, p4)); // false
}
해당 클래스의 인스턴스를 매번 생성하지 않아도 된다.
자식 클래스의 인스턴스를 리턴 받는다.
class Person {
Person.init();
factory Person(String type){
switch(type){
case 'Student':
return Student();
case 'Employee':
return Employee();
}
}
String getType(){
return 'Person';
}
}
class Student extends Person {
Student() : super.init();
String setType(){
return 'Student';
}
}
class Employee extends Person {
Employee() : super.init();
String setType(){
return 'Employee';
}
}
main() {
Person student = Person('Student');
Person employee = Person('employee');
print('type = ${student.getType()}');
print('type = ${employee.getType()}');
}
ㅇㅅㅇ,,