강의: #4.0 Your First Dart Class
강의: #4.1 Constructors
강의: #4.2 Named Constructor Parameters
강의: #4.3 Named Constructors
강의: #4.4 Recap
Class에서 property를 선언할 때는 타입을 사용해서 정의함.
function내에서 variable을 사용할 때는 타입을 명시할 필요없이 var 를 사용하면됨.
하지만 Class를 생성할 때는 타입을 꼭 명시해줘야함.
Class method 내에서의 this는 사용하지 않는 것이 권고되고 있다.
method내의 같은 이름의 변수가 있어 어쩔 수 없이 사용하는게 아닌 이상 말이다.
variable과 class property의 이름이 겹치는게 아니라면 this는 가급적 사용을 안하는 것이 좋다.
constructor method의 이름은 class의 이름과 같아야함.
constructor method 안의 argument는 this를 표시해줘야함.
class에 파라미터를 넘겨주면 파라미터를 받아서 정해진 자리에 할당하는 것.
class Player{
final String name;
int xp;
Player(this.name, this.xp);
void sayHello(){
print("Hi my name is $name");
}
}
void main() {
var player = Player('nico', 1500);
player.sayHello();
var player2 = Player('lynn', 2500);
player2.sayHello();
}
class Player{
final String name;
int xp;
String team;
int age;
Player({
required this.name,
required this.xp,
required this.team,
required this.age
});
void sayHello(){
print("Hi my name is $name");
}
}
void main() {
var player = Player(
name: 'nico',
xp: 1500,
team: 'red',
age: 12,
);
player.sayHello();
var player2 = Player(
name: 'lynn',
xp: 2500,
team: 'blue',
age: 12,
);
player2.sayHello();
}
constructor method 안의 argument에 중괄호를 감싸준다.
각각의 변수를 클래스로 보내면 constructor(생성자)가 이것들을 class property에 할당함.
콜론을 넣음으로써 dart에게 여기서 player 객체를 초기화하겠다고 알려주는 것.
class Player{
final String name;
int xp;
String team;
int age;
Player({
required this.name,
required this.xp,
required this.team,
required this.age
});
Player.createBluePlayer({
required String name,
required int age,
}) : this.age = age,
this.name = name,
this.team = 'blue',
this.xp = 0;
Player.createRedPlayer(String name, int age) :
this.age = age,
this.name = name,
this.team = 'red',
this.xp = 0;
void sayHello(){
print("Hi my name is $name");
}
}
//named syntax 사용
//named parameter는 required 속성이 없기 때문에 명시해줘야함.
void main() {
var player = Player.createBluePlayer(
name: 'nico',
age: 21,
);
//positional syntax사용,
//모든 positional parameter는 기본적으로 required 상태
var redPlayer = Player.createRedPlayer('nico', 12,);
}
아마도 우리는 API로부터 Json format 형식으로 데이터를 받을 거다. 데이터를 받으면 우린 그걸 class로 바꿔야한다. 우리가 API로부터 여러 Player가 들어있는 목록을 받는다고 가정했을 때 다음과 같이 코드를 짤 수 있다.
class Player{
final String name;
int xp;
String team;
//Player class의 생성과 초기화 작업
//Class 내부의 name을 playerJson Map에서 key가 name인 값을 가져와서 넣음
Player.fromJson(Map<String, dynamic> playerJson)
: name = playerJson['name'],
xp = playerJson['xp'],
team = playerJson['team'];
void sayHello(){
print("Hi my name is $name");
}
}
//named syntax 사용
//named parameter는 required 속성이 없기 때문에 명시해줘야함.
void main() {
var apiData = [
{
"name" : "nico",
"team" : "red",
"xp" : 0,
},
{
"name" : "lynn",
"team" : "red",
"xp" : 0,
},
{
"name" : "dal",
"team" : "red",
"xp" : 0,
},
];
apiData.forEach((playerJson) {
var player = Player.fromJson(playerJson);
player.sayHello();
});
}
//String을 key로 dynamic value를 values로 갖는 Map을 가져옴