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