Dart에서 다중 상속이 불가능하기 때문에 Mixin을 활용하면 여러 기능을 손쉽게 클래스에 추가할 수 있습니다.
mixin Engine {
  int power = 5000;
}
mixin Wheel {
  int count = 4;
}
class Sonata with Engine, Wheel {}
void main() {
  Sonata s = Sonata();
  print(s.power);
  Engine e = Engine(); // 인스턴스 할수없다.
}
만약 인스턴스 하고싶다면 class를 붙혀준다.
mixin class Engine {
  int power = 5000;
}
mixin class Wheel {
  int count = 4;
}
class Sonata with Engine, Wheel {}
void main() {
  Sonata s = Sonata();
  print(s.power);
  Engine e = Engine();
  print(e.power);
}
추상클래스
abstract class Animal {
  void speak();
}
class Dog extends Animal {
  @override
  void speak() {
    print("멍멍");
  }
}
class Cat extends Animal {
  @override
  void speak() {
    print("야옹");
  }
}
void main() {
  Animal a1 = Dog();
  Animal a2 = Cat();
  a1.speak();
}
| 구분 | implements | extends | mixin | 
| 역할 | 메서드 시그니처만 가져오고, 반드시 구현해야 함 | 부모 클래스의 모든 기능을 상속받고, 필요시 오버라이드 | 여러 클래스에 재사용 가능한 동작을 추가 | 
| 특징 | 클래스의 메서드 구현을 강제함 | 부모 클래스의 모든 메서드와 필드를 물려받음 | 여러 Mixin을 하나의 클래스에 동시 적용 가능 | 
| 사용 방식 | implements키워드 사용 | extends키워드 사용 | with키워드로 적용 | 
| 사용 예시 | 여러 인터페이스를 구현할 때 | 상속을 통해 기능을 확장하고자 할 때 | 기능을 여러 클래스에 혼합하고자 할 때 | 
| 다중 사용 | 여러 클래스의 인터페이스를 구현 가능 | 단일 상속만 가능 | 여러 Mixin을 동시에 적용 가능 | 
Share article