๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

Dart 4์ผ์ฐจ : ํด๋ž˜์Šค

by ojui 2025. 9. 1.
๋ฐ˜์‘ํ˜•

 

๐Ÿ“ŒClass

โญConstructor

void main() {
  var player = Player('jui', 1000);
  // Hi my name is jui
  player.sayHello();

  var player2 = Player('na', 2000);
  // Hi my name is na
  player2.sayHello();
}

class Player {
  late final String name;
  late int xp;

  // ๊ธฐ๋ณธ ์ƒ์„ฑ์ž
  Player(String name, int xp) {
    this.name = name;
    this.xp = xp;
  }

  void sayHello() {
    print("Hi my name is $name");
  }
}

๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋Š” ํด๋ž˜์Šค ์ด๋ฆ„์œผ๋กœ ์ž‘์„ฑํ•œ๋‹ค.

 

void main() {
  var player = Player('jui', 1000);
  // Hi my name is jui
  player.sayHello();

  var player2 = Player('na', 2000);
  // Hi my name is na
  player2.sayHello();
}

class Player {
  final String name;
  int xp;

  // ๊ธฐ๋ณธ ์ƒ์„ฑ์ž
  Player(this.name, this.xp);

  void sayHello() {
    print("Hi my name is $name");
  }
}

๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

ํด๋ž˜์Šค์˜ ๋ณ€์ˆ˜์—์„œ late ํ‚ค์›Œ๋“œ๋ฅผ ์ง€์šฐ๊ณ , ์ƒ์„ฑ์ž๋ฅผ ๊ฐ„๋‹จํžˆ ํ‘œํ˜„ํ•œ๋‹ค.

 

โญNamed Constructor Parameter

void main() {
  var player = Player(name: 'jui', xp: 1000, team: 'red', age: 10);
  // Hi my name is jui
  player.sayHello();

  var player2 = Player(name: 'na', xp: 2000, team: 'blue', age: 12);
  // Hi my name is na
  player2.sayHello();
}

class Player {
  final String name;
  int xp;
  String team;
  int age;

  // ๊ธฐ๋ณธ ์ƒ์„ฑ์ž
  // Named Constructor Parameter : ์ค‘๊ด„ํ˜ธ ์ถ”๊ฐ€
  Player({
    required this.name,
    required this.xp,
    required this.team,
    required this.age,
  });

  void sayHello() {
    print("Hi my name is $name");
  }
}

ํ•จ์ˆ˜์—์„œ ๋ฐฐ์› ๋˜ Named Parameter์™€ ๋™์ผํ•œ ๊ธฐ๋Šฅ์ด๋‹ค.

์ƒ์„ฑ์ž์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ค‘๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ์„œ ์ž‘์„ฑํ•˜๊ณ , required ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์—ฌ์ค€๋‹ค.

 

โญNamed Constructor

void main() {
  var player = Player.createBluePlayer(name: 'jui', age: 10);
  // Hi my name is jui
  player.sayHello();

  var player2 = Player.createRedPlayer('na', 12);
  // Hi my name is na
  player2.sayHello();
}

class Player {
  final String name;
  int xp, age;
  String team;

  // ๊ธฐ๋ณธ ์ƒ์„ฑ์ž
  // Named Constructor Parameter : ์ค‘๊ด„ํ˜ธ ์ถ”๊ฐ€
  Player({
    required this.name,
    required this.xp,
    required this.team,
    required this.age,
  });

  // Named ์ƒ์„ฑ์ž
  // Named Constructor Parameter ์‚ฌ์šฉ O
  Player.createBluePlayer({required String name, required int age})
    : this.name = name,
      this.age = age,
      this.team = 'blue',
      this.xp = 0;

  // Named ์ƒ์„ฑ์ž
  // Named Constructor Parameter ์‚ฌ์šฉ X
  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");
  }
}

์ด๋ฆ„ ์žˆ๋Š” ์ƒ์„ฑ์ž๋Š” ํด๋ž˜์Šค๋ช….์›ํ•˜๋Š”์ƒ์„ฑ์ž์ด๋ฆ„ ํ˜•์‹์œผ๋กœ ์ž‘์„ฑํ•œ๋‹ค.

์ฝœ๋ก [:] ์„ ์‚ฌ์šฉํ•ด์„œ ํด๋ž˜์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โญCascade Notation

void main() {
  var player = Player.createBluePlayer(name: 'jui', age: 10)
  ..team = 'red'
  ..xp = 12000
  ..age = 13;
  
  // ์œ„์™€ ๊ฐ™์€ ์˜๋ฏธ
  // player.team = 'red';
  // player.xp = 12000;
  // player.age = 13;
}

Syntax Sugar๋Š” ๋‹จ์ถ• ๋ฌธ๋ฒ•์„ ์˜๋ฏธํ•œ๋‹ค.

this๋ฅผ ์ƒ๋žตํ•˜๊ฑฐ๋‚˜, ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•  ๋•Œ return ๋Œ€์‹  => ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋“ฑ์˜ ๋‹จ์ถ• ๋ฌธ๋ฒ•์ด ์žˆ๋‹ค.

 

Cascade Operator๋„ ๋‹จ์ถ•๋ฌธ๋ฒ• ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

.. ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ™์€ ๊ฐ์ฒด์— ๋Œ€ํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โญEnum

void main() {
  var player = Player.createBluePlayer(name: 'jui', age: 10)
    ..team = Team.red
    ..xp = 12000
    ..age = 13;
}

enum Team { red, blue }

class Player {
  final String name;
  int xp, age;
  Team team;

  // ๊ธฐ๋ณธ ์ƒ์„ฑ์ž
  // Named Constructor Parameter : ์ค‘๊ด„ํ˜ธ ์ถ”๊ฐ€
  Player({
    required this.name,
    required this.xp,
    required this.team,
    required this.age,
  });

  // Named ์ƒ์„ฑ์ž
  // Named Constructor Parameter ์‚ฌ์šฉ O
  Player.createBluePlayer({required String name, required int age})
    : this.name = name,
      this.age = age,
      this.team = Team.blue,
      this.xp = 0;

  // Named ์ƒ์„ฑ์ž
  // Named Constructor Parameter ์‚ฌ์šฉ X
  Player.createRedPlayer(String name, int age)
    : this.name = name,
      this.age = age,
      this.team = Team.red,
      this.xp = 0;

  void sayHello() {
    print("Hi my name is $name");
  }
}

enum์˜ ๊ฐ’์ด ๋ฌธ์ž์—ด์ด ์•„๋‹ˆ์–ด๋„ ๋œ๋‹ค.

 

โญAbstract Class

abstract class Human {
  void walk();
}

class Teacher extends Human{
  @override
  void walk() {
    // TODO: implement walk
  }
}

์ถ”์ƒ๋ฉ”์„œ๋“œ๋Š” ์ง์ ‘ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ์„ค๊ณ„์šฉ ํด๋ž˜์Šค์ด๋‹ค.

์ƒ์†์„ ํ†ตํ•ด ์ž์‹ ํด๋ž˜์Šค์—์„œ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•œ๋‹ค.

 

extends ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค.

๋ถ€๋ชจ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” @override ๋ฅผ ๋ถ™์—ฌ์„œ ์ž‘์„ฑํ•œ๋‹ค.

 

โญInheritance 

void main() {
  var player = Player(team: Team.blue, name: 'jui');

  // Hi my name is jui
  // and I play for Team.blue
  player.sayHello();
}

class Human {
  final String name;

  Human({required this.name});

  void sayHello() {
    print("Hi my name is $name");
  }
}

enum Team { red, blue }

class Player extends Human {
  final Team team;

  Player({required this.team, required String name})
    : super(name: name); // ๋ถ€๋ชจ์ƒ์„ฑ์ž ํ˜ธ์ถœ

  @override
  void sayHello() {
    super.sayHello();
    print('and I play for $team');
  }
}

super๋Š” ์ž์‹ ํด๋ž˜์Šค์—์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค์— ์ ‘๊ทผํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ‚ค์›Œ๋“œ์ด๋‹ค.

 

โญMixins

void main() {
  var player = Player(team: Team.red);
  player.runQuick();
}

mixin Strong {
  final double strenghtLevel = 1500.99;
}

mixin QuickRunner {
  void runQuick() {
    print('run!!');
  }
}

enum Team { red, blue }

class Player with Strong, QuickRunner {
  final Team team;

  Player({required this.team});
}

์ƒ์†์ด ์•„๋‹ˆ๋ผ ํ™•์žฅ์˜ ๊ฐœ๋…์ด๋‹ค.

with ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ mixin class๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

mixin class๋Š” ์ธ์Šคํ„ด์Šคํ™”๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ƒ์„ฑ์ž๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค.

๋ฐ˜์‘ํ˜•