๐Ÿ”ถ [์˜ค๋ฆ„์บ ํ”„_3์ผ์ฐจ] Dart ๋ฌธ๋ฒ• ๊ธฐ์ดˆ -2

์†์„ธ์€ยท2023๋…„ 11์›” 29์ผ

Dart ๋ฌธ๋ฒ• ๊ธฐ์ดˆ - 2

class & object

  • Object : ๋ฐ์ดํ„ฐ ํ˜น์€ ๊ธฐ๋Šฅ์ด ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ ํ”„๋กœ๊ทธ๋žจ ์ƒ์—์„œ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด
  • Class: Object ์˜ ๋ฐ์ดํ„ฐ์™€ ๊ธฐ๋Šฅ์ด ์ •์˜๋˜์–ด ์žˆ๋Š” ์„ค๊ณ„๋„
  • Class์˜ ๊ตฌ์„ฑ์š”์†Œ
  • ์‚ฌ์šฉ ๋ฐฉ๋ฒ•
class Person{
  String name;
  int age;
  
  Person(this.name, this.age);
  
  void printInfo(){
    print('${name} is ${age} years old.');
  }
  
}

void main() {
  var person = Person('John Doe', 30);
  person.printInfo();
  
  var person2 = Person('Sanghyun Ha', 28);
  person2.printInfo();
  
}

Inheritance

Untitled

  • ์ธ์ง€ ํ•ด์•ผ ํ•  ํ‚ค์›Œ๋“œ: extends, super, @override
  • ๋ถ€๋ชจ ํด๋ž˜์Šค : IronMan
class IronMan {
  String name;
  int powerLevel;

  IronMan(this.name, this.powerLevel);

  void shoot() {
    print('$name is shooting guns!');
  }
}
  • ์ž์‹ ํด๋ž˜์Šค: IronManMK3
class IronManMK3 extends IronMan {  //๋ถ€๋ชจํด๋ž˜์Šค IronMan์„ ์ƒ์†๋ฐ›์Œ
  //๋น„ํ–‰๊ณ ๋„ ๊ฐ’์„ ์ถ”๊ฐ€ํ•œ๋’ค
  int flyHeight;
  
  IronManMK3(String name, int powerLevel, this.flyHeight) 
  : super(name, powerLevel); //super: ์ตœ๊ณ ! ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋ณ€์ˆ˜๋ฅผ ์ƒ์†๋ฐ›์Œ.
  
  //MK3๋Š” ๋ฆฌํŽ„์„œ๋ฅผ ์˜๊ณ  ํ•˜๋Š˜์„ ๋‚ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด๋ณด์„ธ์š”.
  //shoot() ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•ฉ๋‹ˆ๋‹ค.
  
    void shoot() {
    //print('$name is shooting guns!');
    -> print('$name is shooting Laser!');
  }
  //fly() ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”
    void fly() {
    print('$name is Flying!');
  }
}
  • ์‚ฌ์šฉ ๋ฐฉ๋ฒ•:
void main() {
  IronMan mk1 = IronMan("mk1", 10);
  IronManMK3 mk3 = IronManMK3("mk3", 20, 1000);

  mk1.shoot();
  mk3.shoot();
}

//mk1 is shooting guns!
//mk3 is shooting Laser!

abstract class

  • Dart class๋Š” ์•”์‹œ์ ์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Abstract์™€ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์—ญํ• ์ด ์–ด๋А ์ •๋„ ๊ฒน์น˜๊ธฐ ๋•Œ๋ฌธ์— Abstract ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์›ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • abstract class
abstract class IronMan {
  late String name;
  late String suitColor;

  void fly();
  void shootLasers();
  void withstandDamage();
}
  • abstract class ์‚ฌ์šฉ ๋ฐฉ๋ฒ•
class Mark50 extends IronMan {

  // 'Mark50' ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž
  Mark50(String name, String suitColor) {
    this.name = name;
    this.suitColor = suitColor;
  }

  
  void fly() {
    print('${this.name} is flying!');
  }

  
  void shootLasers() {
    print('${this.name} is shooting lasers!');
  }

  
  void withstandDamage() {
    print('${this.name} is withstanding damage!');
  }
}
  • ์‚ฌ์šฉ๋ฐฉ๋ฒ•
void main(){
  var markSeeun = Mark50('์„ธ์€', '๋ ˆ๋“œ');
  markSeeun.fly();
}

//์„ธ์€ is flying!

mixin

  • Dart๋Š” Mixin์„ ํ†ตํ•ด class์— ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํด๋ž˜์Šค๋Š” ์ƒ์†๋„ ๋ฐ›๊ณ , mixin๋„ ๋ฐ›๋Š”๋‹ค.
  • mixin
mixin Flyable on Animal {  
//์„ž์–ด์“ธ ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค. Animal์„ extends ๋ฐ›์€ ํด๋ž˜์Šค์—๋งŒ
  void fly() {
    print('I am flying!');
  }
}
  • ์ƒ์† ํด๋ž˜์Šค
class Animal {
  String name;

  Animal(this.name);
}
  • ํด๋ž˜์Šค + ์ƒ์† ํด๋ž˜์Šค + mixin
class Bird extends Animal with Flyable {   //๋‹ค์ค‘ ์ƒ์†๊ณผ ๋น„์Šทํ•จ.
  // Bird๋Š” Animal์˜ ๋ชจ๋“  ์†์„ฑ๊ณผ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง€๋ฉฐ,
  // Flyable mixin์—์„œ ์ œ๊ณตํ•˜๋Š” fly() ๋ฉ”์†Œ๋“œ๋„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

  Bird(String name) : super(name);
}

void main() {
  var bird = Bird('Bird'); // "Bird"๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ Bird ๊ฐ์ฒด ์ƒ์„ฑ
  bird.fly(); // "I am flying!"์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
}
//
profile
ํž™์Šคํ„ฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ ๋ž˜์š”

0๊ฐœ์˜ ๋Œ“๊ธ€