본문 바로가기
개발

[Dart] Class와 Constructors(생성자) 개념 이해!

by NoDapKeepGoing 2024. 8. 16.

1. Constructors(생성자)란?

생성자란 클래스의 인스턴스를 만드는 특별한 함수이다.

생성자 함수의 이름은 class의 이름과 같아야 한다!

class Student {
	late String name; //late : 변수들의 값을 나중에 받아올 것을 의미
    	late int age;
    
    Student(String name, int age) {
    	this.name = name;
        this.age = age;
    }
    
    void callStudent() {
    	print("$age 살 $name 학생, 또 핸드폰 하는 거예요?")
    }
}

 

2. main()에서 사용해보기!

void main() {
	var student1 = Student("susu", 22);
} //console에 "22 살 susu 학생, 또 핸드폰 하는거예요?" 출력

 

3. 더 예쁜 코드로 만들기!

첫 번째 argument와 두 번째 arguement에 대해 this.를 붙여 지시해주면 끝!

이때, 순서가 변경되면 안된다는 점을 주의해야 한다!!

class Student {
	final String name; //final : 사용자가 변수를 변경할 수 없게 함
    	int age;
    
    Student(this.name, this.age);
    
    void callStudent() {
    	print("$age 살 $name 학생, 또 핸드폰 하는 거예요?")
    }
}

 

4. 순서가 헷갈린다면?

 

각 argument를 명명된 생성자로 바꿔주면 된다!

class Student {
	final String name;
    	int age;
    
    Student({this.name, this.age}); //여기 중괄호가 추가됨!
    
    void callStudent() {
    	print("$age 살 $name 학생, 또 핸드폰 하는 거예요?")
    }
}

void main() {
	var student = Student(
    	//namde parameter 형식
    	name: "susu",
        age: 22, //코드 포맷팅 용으로 끝에 ,를 붙여야 함
    );
}

 

 

5. 아아 공습 경보 공습 경보!! 에러 발생 !!!!!

name과 age가 null이라면? 이라고 다트가 질문을 던져준다.

이에 대한 해결 방법은 두 가지가 있다.

 

1. 기본값 주기 (비추)

2. 앞에 required 붙여주기 (추)

 

class Student {
	final String name;
    	int age;
    
    Student({
    	required this.name,
        required this.age, //여기도 끝에 ,붙이기!
    });
    
    void callStudent() {
    	print("$age 살 $name 학생, 또 핸드폰 하는 거예요?")
    }
}

void main() {
	var student = Student(
    	name: "susu",
        age: 22,
    );
}

 

2번 방법으로 required를 붙여주면 해결 완!

 

 

 

[참고]

https://nomadcoders.co/dart-for-beginners/lectures/4116