Dart abstract Class & mixin

ssh·2023년 11월 29일

오름캠프

목록 보기
2/3

요약

  1. Dart 클래스는 암시적으로 인터페이스의 역할을 할 수 있다.
  2. Dart는 Mixin을 통해 Class에 기능을 추가할 수 있다.
  3. Abstract와 인터페이스는 역할이 어느정도 겹치기 때문에 Abstract 키워드를 사용해 원하는 메서드를 구현할 수 있다.

abstract Class

  • 모양을 그리는 class를 만들고 상속받는 class에서 나머지 기능을 자유롭게 완성하도록 유도

abstract class 예제

//추상클래스를 사용하여 IronMan Class에 method를 구현하기 

abstract class IronMan {
  var name;
  var suitColor;

  IronMan(this.name, this.suitColor);
  // This is an abstract method. It must be implemented by subclasses.
  void fly();

  // This is an abstract method. It must be implemented by subclasses.
  void shootLasers();

  // This is an abstract method. It must be implemented by subclasses.
  void withstandDamage();
}

//@override 구문을 사용하여 abstract method 구현
class Mark50 extends IronMan {
  
  Mark50(String name, String suitColor):super(name, suitColor);

  
  void fly(){
    print('$name is flying');
  }
  
  
  void shootLasers(){
    print('$name shoot Laser!');
  }
  
  
  void withstandDamage(){
    print('$name is huge Damage!');
  }
  
}

void main(){
 var mark50 = Mark50('Mark50', 'red');
  
  mark50.fly();
  mark50.shootLasers();
  mark50.withstandDamage();
  
}

mixin

  • 다형성 표현하는 방법 중 하나다.
    • 다중상속 효과과 있으며 실제로 다중상속이 되는 것은 아니다.
    • 인스턴스화가 불가능하다.

mixin은 extends나 with를 사용할 수 없다.
그렇기 때문에 mixin class도 마찬가지로 사용 불가능하다.
클래스는 on 키워드를 사용 할 수 없다.
그렇기때문에 mixin class도 on 키워드를
사용할 수 없다.

mixin 예제 1

mixin Flyable on Animal {
  void fly() {
    print('I am flying!');
  }
}

class Animal {
  String name;

  Animal(this.name);
}

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!"을 출력합니다.
}

mixin 예제 2

void main() {
  SuperHero superHero = SuperHero();
  Hero hero = SuperHero();
  Moveable moveable = SuperHero();
  Drawable drawable = SuperHero();
}

mixin Moveable {
  int i = 0;

  void move() {
    //
  }
}

mixin Drawable {
  void draw() {}
}

class Hero {}

class SuperHero extends Hero with Moveable, Drawable {}

0개의 댓글