일단 dart로 간단한 class를 만들어본다.
class Player {
final String name = 'jinjin';
int age = 25;
String country = 'seoul';
}
void main(){
var player1 = Player();
print(player1.name); // jinjin
}
간단하게 player를 만들어주는 class를 만들었지만 모든 player가 같은 정보를 갖고 있을 것이다.
이번엔 각각 다른 player가 될 수 있도록 생성자를 추가해본다.
class Player {
late final String name; // 변수의 값을 생성자로 나중에 할당하기 때문에 late를 사용
late int age;
late String country;
Player(String name, int age, String country){
this.name = name;
this.age = age;
this.country = country;
}
}
void main(){
var player1 = Player('jinjin', 25, 'seoul'); // 생성자가 생겼기에 매개변수를 추가해준다.
print(player1.name); // jinjin
}
이렇게 생성자를 추가하여 각각 다른 정보의 player를 만들 수 있게 되었다.
dart는 여기서 조금 더 간결하게 작성할 수 있다.
class Player {
final String name;
int age;
String country;
Player(this.name, this.age, this.country,);
}
void main(){
var player1 = Player('jinjin', 25, 'seoul');
print(player1.name); // jinjin
}
이렇게 사용하면 late도 필요 없어지고 생성자도 간결해진다.
class Player {
final String name;
int age;
String country;
Player(this.name, this.age, this.country,);
}
void main(){
var player1 = Player('jinjin', 25, 'seoul');
print(player1.name); // jinjin
}
var player1 = Player('jinjin', 25, 'seoul');을 보면 매개변수로 받고 있는 값이 무엇을 뜻하는지 알기 힘들다.
이런 경우 함수와 똑같이 named 해주는 방법이 있다.
class Player {
final String name;
int age;
String country;
Player({required this.name, required this.age, required this.country,});
// null-safety를 위해 required 또는 defalut value를 명시해야한다.
}
void main(){
var player1 = Player(name: 'jinjin', age: 25, country: 'seoul');
// 매개변수마다 항목에 대한 명칭을 알 수 있다.
print(player1.name); // jinjin
}
이번엔 대구사람을 생성하는 생성자를 만들어본다.
class Player {
final String name;
int age;
String country;
Player({
required this.name,
required this.age,
required this.country,
});
Player.makeDaegu({
required String name,
required int age,
}) : this.name = name,
this.age = age,
this.country = "deagu"; // country를 매개변수로 초기화 하지 않는다.
}
void main() {
// 명명된 매개변수로 전달
var player1 = Player.makeDaegu(name: 'jinjin', age: 25);
print(player1.name); // 출력: jinjin
}
매개변수로 초기화 하지 않기 때문에 makeDaegu 매서드에서는 : 을 사용해 초기화를 해주어야한다.
dart에서는 :을 사용하면 속성이 일괄 초기화 된다.