Named Constructor Parameters
이전 포스팅을 보면 function처럼 argument를 받아서 클래스를 생성한다. 그러나 이건 class가 커질수록 argument가 많아져서 관리하기가 힘들다.
function처럼 named parameters를 적용하기만 하면 된다.
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: 'taek',
xp: 1200,
team: 'blue',
age: 21,
);
player.sayHello();
var player2 = Player(
name: "lynn",
xp: 2500,
team: 'blue',
age: 21,
);
player2.sayHello();
}
function과 동일하므로 더이상 설명은 생략!
Named Constructors
이전에는 모든 argument를 보내서 원하는 객체를 생성했다.
그러나 위처럼 name과 age만 보내서 red팀 또는 blue팀을 생성하려고 한다면 어떻게 하면 좋을까?
이런 식으로 named constructor를 만들수 있다.
즉, 이건 class(Player)를 초기화하는 method이다.
다른 이름을 가지고있고, 필요에 따라 다른 인자를 받게 할수도있다.
따라서 main 안에 에러는 사라진걸 확인할 수 있다.
다음 Player의 오류에 대한건 Dart의 고유 문법을 사용해서 해결할 것이다.
':' 을 추가해서 이 객체를 초기화 할 것이라는 것을 선언하고, 아래에 parameter value와 초기화 할 값을 넣는다.
추가로 위는 named syntax였다면 positional syntax로 생성하는 방법을 보자.
positional로 하면 기본적으로 required이기 때문에 이렇게 할 수 있다.
blue처럼 required를 선언해주면 명시적이여서 도움될 수 있고, red처럼 비교적 코드를 간결하게 작성할 수 있어서 둘중 선택해서 사용하면 될 것 같다.
중요한 것은 ':' 을 사용해서 객체 초기화를 간단하게 할 수 있다는 것을 명심하자.
마지막으로 전체 소스코드를 넣으면서 이 포스팅은 마무리하겠다.
class Player {
final String name;
int xp, age;
String team;
Player({
required this.name,
required this.xp,
required this.team,
required this.age,
});
Player.createBluePlayer({
required String name,
required int age,
}) : this.name = name,
this.age = age,
this.team = 'blue',
this.xp = 0;
Player.createRedPlayer(String name, int age)
: this.name = name,
this.age = age,
this.team = 'red',
this.xp = 0;
void sayHello() {
print("Hi, my name is $name");
}
}
void main() {
var bluePlayer = Player.createBluePlayer(
name: 'taek',
age: 12,
);
var redPlayer = Player.createRedPlayer('jeong', 21);
}
API에서 Named Constructors 사용 예시
API를 호출해서 JSON형식의 데이터를 받았을 때의 예를 든 소스코드를 넣어두겠다.
문법을 외우기보단 어떻게 동작하는지를 이해하도록 하자.
class Player {
final String name;
int xp;
String team;
Player.fromJson(Map<String, dynamic> playerJson)
: name = playerJson['name'],
xp = playerJson['xp'],
team = playerJson['team'];
void sayHello() {
print("Hi, my name is $name");
}
}
void main() {
var apiData = [
{
"name": "taek",
"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();
});
}
결과
'앱 개발 > Dart' 카테고리의 다른 글
Dart Classes(클래스) - Cascade Operator, Enum, Abstract Class, Inheritance, Mixin (0) | 2024.05.16 |
---|---|
Dart Classes(클래스) - Class, Constructors (0) | 2024.05.14 |
Dart Functions(함수) - Optional Positional Parameters, QQ Operator, Typedef (0) | 2024.05.09 |
Dart Functions(함수) - Defining a Function, Named Parameters (0) | 2024.05.08 |
Dart Data Types(데이터 타입) (0) | 2024.05.08 |