728x90
    
    
  
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 | 
			
			
				
			
댓글