class Player{
final String name;
int? xp, age;
String? team;
Player({required this.name, this.xp, this.team, this.age}); //constructor
//Player.createBluePlayer는 메서드가 아니라 Named Constructor (이름있는 생성자)
// ':' : Player를 초기화하는 역할
Player.createBluePlayer({required String name, required int age})
: this.age = age,
this.name = name,
this.team = "blue",
this.xp = 0;
void display(){
print("Hi My name is $name");
}
}
void main(){
Player p = Player(name:"asd",xp: 21);
print(p.name);
p.display();
}
그냥 생성자만 하면되는데 왜 이름있는 생성자를 쓸까?
같은 클래스에서 목적에 따라 다양한 방식으로 객체를 생성할 수 있어서입니다.
// 일반 생성자
Player p1 = Player(name: "asd", xp: 21);
// 블루팀 전용 생성자
Player p2 = Player.createBluePlayer(name: "nico", age: 20);
// 레드팀 전용 생성자
Player p3 = Player.createRedPlayer(name: "lynn", age: 25);
일반 생성자만 쓰면 매번 이렇게 해야 하죠.
Player p = Player(name: "nico", age: 20, team: "blue", xp: 0);
팀 색깔별, 역할별로 객체를 자주 만들어야 할 때 named constructor를 쓰면 코드 가독성과 실수 방지 측면에서 유리합니다. 블루팀 생성자를 쓰면 team이나 xp를 빠뜨릴 일이 없으니까요.
class Player{
final String name;
int? xp, age;
String? team;
Player({required this.name, this.xp, this.team, this.age}); //constructor
//Player.createBluePlayer는 메서드가 아니라 Named Constructor (이름있는 생성자)
// ':' : Player를 초기화하는 역할
Player.createBluePlayer({required String name, required int age})
: this.age = age,
this.name = name,
this.team = "blue",
this.xp = 0;
Player.createRedPlayer({required String name, required int age})
: this.name= name,
this.age = age,
this.team = "red",
this.xp = 0;
void display(){
print("Hi My name is $name");
}
}
void main(){
Player p = Player(name:"asd",xp: 21);
p.display();
Player pred = Player.createBluePlayer(name: "red",age: 23);
Player pblue = Player.createBluePlayer(name: "blue",age: 25);
pred.display();
pblue.display();
}
#출력
Hi My name is asd
Hi My name is red
Hi My name is blue
활용
Json 형태의 api를 받아서 객체 생성
class Player{
final String name;
int? xp, age;
String? team;
Player.fromJson(Map<String, dynamic> playerJson):
name = playerJson["name"],
xp = playerJson["xp"],
team = playerJson["team"];
void display(){
print("Hi My name is $name");
}
}
void main(){
var apiData = [
{
"name":"aaa",
"team":"red",
"xp":0,
},
{
"name":"bbb",
"team":"blue",
"xp":0,
},
{
"name":"ccc",
"team":"blue",
"xp":0,
}
];
apiData.forEach((playerJson){
var player = Player.fromJson(playerJson);
player.display();
});
}
#출력
Hi My name is aaa
Hi My name is bbb
Hi My name is ccc
여기서 forEach 문법도 유념하자. foreach((playerJson) { ...은 apiData json의 원소
namedConstructor는 많이 사용할 것이니 잘 익혀두자.
'DART&Flutter' 카테고리의 다른 글
| Dart) 오버라이딩 (0) | 2026.05.19 |
|---|---|
| Dart) Cascade operator (0) | 2026.05.19 |
| Dart) 클래스 생성자 및 Named Parameters (0) | 2026.05.18 |
| Dart) final vs const (2) | 2026.05.15 |
| Dart) late 관련 코드 (0) | 2026.05.15 |
