목적

앱 개발시 생성자에 대한 지식이 부족한것 같아 Dart의 다양한 생성자들을 공부해보고자 함.

본문

기본 생성자

Default 생성되는 생성자

class Person {
	Person(){}
}
호출 순서
  1. (자식 클래스에서)부모 클래스 생성자 호출 및 (부모 클래스에서)실행
  2. 자식 클래스 생성자 실행

이름있는 생성자

이름이 부여된 생성자
자바에서 생성자 오버라이딩과 비슷한 개념일듯(뇌피셜)

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()}');
}

결론

ㅇㅅㅇ,,

profile
2021.05.03) Flutter, BlockChain, Sports, StartUp

0개의 댓글