4-0) Your First Dart Class
class Player{
String name = 'nico';
int xp = 1500;
}
void main() {
var player = Player(); //new를 붙여도 되지만 안붙여도 됨
print(player.name);
print(player.xp);
player.name = 'lalala';
print(player.name);
}
4-1) Constructor
- 생성자 요약 가능
class Player{
late final String name;
late int xp;
--
Player(String name, int xp){
this.name = name;
this.xp = xp;
}
--
//생성자를 다음과 같이 줄일 수 있음
Player(this.name, this.xp);
--
void sayHello(){
print("Hi my name is ${name}");
}
}
void main() {
var player = new Player('nico', 1500);
player.sayHello();
}
4-2) Named Constructor 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 = new Player(
name: 'nico',
xp: 1500,
team: 'red',
age: 12,
);
player.sayHello();
}
4-3) Named Constructor 1
- : (콜론)을 사용하여 default값을 설정 할 수 있음
- . (점)을 사용하여 특정 이름을 정해 생성자를 만들 수 있음
- java에 default값을 제시해주고 생성하는 형태와 비슷한거 같다.(????)
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;
void sayHello() {
print("Hi my name is ${name}");
}
}
void main() {
var player = new Player(
name: 'nico',
xp: 1500,
team: 'red',
age: 12,
);
player.sayHello();
var player2 = new Player.createBluePlayer(name: "Kim", age: 23);
player2.sayHello();
}
4-4) Named Constructor 2
- Map을 활용한 예시
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": "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();
});
}
4-5) Cascade Notation
- .. 을 활용하여 변수에 새로운 데이터 대입할 수 있다.
class Player {
String name;
int xp;
String team;
Player({required this.name, required this.xp, required this.team});
void sayHello() => print("Hi my name is ${name}");
}
//potato.name 대신에 ..name을 사용하여 해당 값을 대체할 수 있음
void main() {
var nico = Player(name: 'nico', xp: 1200, team: 'red');
//nico의 데이터를 수정
var potato = nico
..name = 'las'
..xp = 1200000
..team = 'blue'
..sayHello(); //이 결과값과
nico.sayHello(); //이 결과값은 같다.
}
4-6) Enums
- 개발자들의 실수를 줄여줌
- 선택의 폭을 줄여 길수를 한정
enum Team {red, blue}
enum XPLevel {beginner, medium, pro}
class Player {
String name;
XPLevel xp;
Team team;
Player({required this.name, required this.xp, required this.team});
void sayHello() => print("Hi my name is ${name}");
}
void main() {
var nico = Player(name: 'nico', xp: XPLevel.beginner, team: Team.red);
var potato = nico
..name = 'las'
..xp = XPLevel.pro
..team = Team.blue
..sayHello();
nico.sayHello();
}
4-7) Abstract Classes
- java의 추상클래스와 기능 동일
abstract class Human {
void walk();
}
enum Team { red, blue }
enum XPLevel { beginner, medium, pro }
class Player extends Human {
String name;
XPLevel xp;
Team team;
Player({required this.name, required this.xp, required this.team});
void sayHello() => print("Hi my name is ${name}");
@override
void walk() {
print("I'm walk");
}
}
class Coach extends Human{
@override
void walk(){
print('The coach walk');
}
}
void main() {
var nico = Player(name: 'nico', xp: XPLevel.beginner, team: Team.red);
var potato = nico
..name = 'las'
..xp = XPLevel.pro
..team = Team.blue
..sayHello();
nico.sayHello();
}
4-8) Inheritance
- 상속의 개념은 java와 같음
class Human {
final String name;
//{}안에 넣을 시 key와 value값으로 넣어주어야함
Human({required this.name});
void sayHello() {
print("Hi my name is ${name}");
}
}
enum Team { red, blue }
class Player extends Human {
final Team team;
//위에서 {}안에 required로 넣었기 때문에 super()에서 key와 value값으로 넣어줌
Player({required this.team, required String name}) : super(name: name);
@override
void sayHello(){
print("Hi my name is ${super.name}. My team is ${team}");
}
}
void main() {
var player = Player(team: Team.red, name: 'nico');
player.sayHello();
}
4-9) Mixins
- 생성자가 없는 Class
- 클래스에 프로퍼티들을 추가하거나 할 때 사용
- with예약어를 사용
- 클래스 갯수에 제한이 없음
- with에 선언된 class들의 모든 것을 뺏어오는 기능(사용이 가능해짐)
class Player with Strong, QuickRunner {
...
}
Uploaded by N2T
728x90
반응형
'Language > Dart' 카테고리의 다른 글
3. Function (0) | 2023.04.05 |
---|---|
2. Data Types (0) | 2023.04.05 |
1. Variables (0) | 2023.04.05 |
0. Why Dart (0) | 2023.04.05 |
댓글