Language/Dart

4. Classes

ABCD 2023. 4. 5.

목차

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

댓글