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

댓글

💲 추천 글