Flutter앱 유지보수 1년 간 해보기 프로젝트 -11(Dart언어에서 생성자에 대해)

박경현·2023년 12월 1일
0

어제 오늘 다트언어에서 생성자란 정확히 무엇을 의미하고 생성자 방법이 몇개가 있는지 공부했었다

생성자란 처음 객체를 생성할 때 호출되는 메서드이다

업로드중..

기본 생성자

기본 생성자는 말 그대로 따로 인자를 받지 않고 객체 생성시 단순하게 불리는 생성자이다!

class Person {
	Person () {
    	print("This is Person!");
    }
}
class Student extends Person {
	Student() {
    	print("This is Student!");
    }
}
void main() {
	var student = Student();
}

차고로 부모 생성자가 불리고 자식 생성자가 호출된다!

이건 이번에 공부하면서 알게 된 내용 => 자식 클래스는 부모클래스의 생성자는 상속 받지 않는다
왜 안받을까 생각해보면 이건 부모가 호출될때만 불리는 아이덴티티인거 같다
자식에서 재사용하기 위한 내용은 생성자에 넣지 말고 따로 함수를 만들자!

이름있는 생성자

생성자는 위에 코드 처럼 Person()하면 불리기도 하지만 Dart에서는 Person.생성자이름() 이렇게가 가능하다

class Person {
	Person() {
    	print("기본 생성자");
    }
    Person.init() {
    	print("init 생성자");
    }
}
class Student extends Person {
	Student() {
    	print("student 생성자");
    }
    Student.init() {
    	print("Student init");
    }
}
void main() {
	var student = Student();
    var studentInit = Student.init();
}

// 기본 생성자
// Student생성자
// 기본 생성자
// Student init

여기서 중요하게 봐야하는게 2가지 정도가 있다

  1. Person() 이라는 이름 없는 생성자가 있어야 Person.init() 같은 이름 있는 생성자 적기 가능!
  2. init()으로 호출해도 부모도 그걸로 호출되지는 않는다!

초기화 리스트

생성자의 구현부가 실행되기 전에 인스턴스 변수를 초기화 할 수 있다!

class Person {
	String name;
    
    Person() : name = "Kim" {
    	print("this is normal $name");
    }
    Person.init(): name = "kk" {
    	print("this is Person init");
    }
    
}
void main() {
	var person = Person();
    var person2 = Person.init();
}

리다이렉팅 생성자

이 방식을 가장 많이 보고 많이 사용해봤다!
클래스내 변수를 입력 받아서 넣어주기!

class Person {
	String name;
    int age;
    
    Person(this.name, this.age) {
    	print("name = $name");
        print("age = $age");
    }
}
void main() {
	var person = Person("kim", 20);
}

상수 생성자

우리는 객체를 만들때마다 각 객체를 위한 메모리 공간을 할당해줘야한다
만약에 같은 객체를 서로 공유해야한다면 이때는 어떻게 해야할까?

그래서 Dart에는 상수 생성자가 존재한다!! 해당 클래스가 상수처럼 변하지 않는 객체를 생성해준다

class Person {
	final String name;
    final int age;
    
    const Person(this.name, this.age);
}
void main() {
	Person p1 = const Person("kim", 20);
    Person p2 = const Person("kim", 20);
    Person p3 = const Person("kim", 40);
 	Person p4 = new Person("kim", 20);
    
    print(identical(p1,p2));
    print(identical(p1, p3));
 	print(identical(p1, p4));
}
/*
true
false
false
*/

업로드중..

피드백

요새 많이 공부를 소홀히 했는데 계획했으면 바로 바로 행동하자!
특히 플러터 위젯과 파이어베이스까지는 12월에 다 끝내자!

1~2월에는 서비스 제작 및 해커톤 나가자

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글