본문 바로가기

A.개발관련자료

Dart 기초(2)-2

**출처 : 인프런 강좌 'Dart 언어 4시간만에 완전정복'의  2강 OOP 강의 내용을 정리한 script 입니다.

1.상속

void main() {
  print('-----fruit---------');
  Fruit someFruit = Fruit(name:"망고",fruitCount:5);
  someFruit.sayName();
  Sour sourFruit = Sour('오렌지',7);
  sourFruit.sayFruitCount();
  sourFruit.sayEatme();
  
  print('-----type comparison---------');
  print(someFruit is Fruit);
  print(sourFruit is Sour);
  print(someFruit is Sour);
}
//1.inheritance(상속)
  class Fruit{
    String name;
    int fruitCount;
    
    Fruit({
      required this.name,
      required this.fruitCount,
    });
    void sayName(){
      print('저는 ${this.name}입니다');
    }
    void sayFruitCount(){
      print('${this.name}은 ${this.fruitCount}개의 과일들이 있습니다.');
    }
  }

class Sour extends Fruit {
  Sour(
  String name,
  int fruitCount
  ) : super (
  name:name,
  fruitCount:fruitCount
  );
  void sayEatme(){
    print('${this.name}는 맛있어 먹고싶쥬?');
  }
}

2.override

//override(덮어쓰다)
void main() {

  TimesTwo tt = TimesTwo(2);
  print(tt.calculator());
  TimesFour tf = TimesFour(2);
  print(tf.calculator());
}

class TimesTwo{
  final int number;
  
  TimesTwo(
  this.number
  );
  
  int calculator(){
    return number*2;
  }
}

class TimesFour extends TimesTwo{
  TimesFour(int number):super(number);
  @override
    int calculator(){
//==//     return super.number*4;
//==//     return number*4;
      //this.calculator쓰면 안됌 => 내부에서 현재 class가 돌게 되어 무한반복함
      return super.calculator()*2;
  }
}

3.static

void main() {
  Employee jiyoon = Employee('지윤');
  //Employee의 name은 final로 지정되지 않아 인스턴스에 귀속되어있다.
  jiyoon.name = '기범';
  Employee.building = '화물재단빌딩';
  jiyoon.printNameAndBuilding();

  Employee.printBuilding();
}
class Employee {
  //static은 class에 귀속된다.
  static String? building;
  String name;
  
  Employee(this.name);
  
  void printNameAndBuilding(){
    print('${name} 이 ${building}에 있습니다.');
  }
  static void printBuilding(){
    print('저는 $building 건물에서 근무합니다.');
  }
}

4.interface  작업중

void main() {

}
//1.02부터 봐야함
//interface - dart에서는 class로 사용하는 경우가 많음 : implements키워드 사용
//=>상속과는 다른점 : 기본 시그니처를 맞춰주어야함
class FruitInterface{
  String name;
  FruitInterface(this.name);
  void sayName(){
  }
}

class Sour implements FruitInterface{
  String name;
  Sour(this.name);
  void sayName(){
    
  }
}