728x90
반응형
Dart의 생성자는 다른 언어의 생성자와 유사합니다.
기본적인 생성자 방식을 알아보고
Named Constructor에 대해서 알아보겠습니다.
Named Constructor에 대해 알아보기 전에 Named Parameter에 대해서 확인하세요.
[개발해보겡/Flutter] - Dart named parameter & positional parameter
class Human {
final String name;
int age;
// Constructor
Human(this.name, this.age);
void intro() {
print("My name is $name and I'm $age years old");
}
}
void main() {
var human = Human('name', 50);
human.intro();
}
dart는
클래스 내의 멤버 함수에서 멤버 변수를 사용할 때
this. 없이 변수명을 바로 사용해도 좋습니다.
다음은 Named Constructor를 이용한 클래스 생성입니다.
class Human {
final String name;
int age;
String hair;
// Constructor
Human({
required this.name,
required this.age,
required this.hair,
});
void intro() {
print("My name is $name and I'm $age years old. My hair-color is $hair");
}
}
void main() {
var human1 = Human(
name: 'name',
age: 50,
hair: 'gold'
);
var human2 = Human(
name: 'nickname',
age: 40,
hair: 'black'
);
human1.intro();
human2.intro();
}
추가적으로
hair-color에 따라 다른 생성자를 불러오도록 코드를 작성해보겠습니다.
class Human {
final String name;
int age;
String hair;
// Constructor
Human({
required this.name,
required this.age,
required this.hair,
});
Human.createHairGold({
required this.name,
required this.age,
}) : hair = 'Gold';
Human.createHairBlack({
required this.name,
required this.age,
}) : hair = 'Black';
void intro() {
print("My name is $name and I'm $age years old. My hair-color is $hair");
}
}
void main() {
var human1 = Human.createHairBlack(
name: 'name',
age: 50,
);
var human2 = Human.createHairBlack(
name: 'nickname',
age: 40,
);
human1.intro();
human2.intro();
}
위의 내용을 숙지하셨다면
Named Constructor를 통해 Json 형식 데이터를 파싱해서 Class를 생성하는 코드를 살펴보겠습니다.
class Human {
late final String name;
late int age;
late String hair;
Human.fromJson({required Map<String, dynamic> humanJson})
: name = humanJson['name'],
age = humanJson['age'],
hair = humanJson['hair'];
void intro() {
print("My name is $name and I'm $age years old. My hair-color is $hair");
}
}
void main() {
// List<Map<String, Object>>
var apiData = [
{
"name": "name",
"hair": "gold",
"age": 60,
},
{
"name": "nickname",
"hair": "black",
"age": 40,
},
{
"name": "noname",
"hair": "silver",
"age": 30,
},
];
apiData.forEach((humanJson) {
var human = Human.fromJson(humanJson : humanJson);
human.intro();
});
}
짜잔
감사합니다
반응형