반응형
- mixin이라는 예약어로 선언되는 변수 또는 함수 입니다. 클래스는 아니기 때문에 생성자는 선언할 수 없습니다.믹스인은 생성자를 가질 수 없으므로 객체를 생성할 수도 없다.
mixin MyMixin{
int data1 = 10;
static int data2 = 20;
MyMixin(){} // 오류
void test(){
}
static void test2(){}
}
main(){
var obj = MyMixin(); // 오류
}
- 객체지향 언어는 다중상속을 지원하지 않는다. 그런데 여러 클래스에 선언된 멤버를 상속한 것 처럼 이용하고 싶을 때가 있다. 이때 믹스인을 사용한다.
mixin MyMixin{
int data1 = 10;
static int data2 = 20;
MyMixin(){} // 오류
void test(){
}
static void test2(){}
}
main(){
var obj = MyMixin(); // 오류
}
class MyClass with MyMixin{
void sayHello(){
print('data : $data1');
test1();
}
}
- with 예약어로 믹스인을 이용하는 클래스의 객체는 믹스인 타입으로 사용할 수 있다.
class MyClass with Mixin{}
main(){
var obj = MyClasS();
if(obj is Mixin){
print('obj is Mixin');
}else {
print('obj is not Mixin');
}
MyMixin obj2 = MyClass();
}
- 믹스인은 모든 클래스에서 with예약어로 사용할 수 있다. 그런데 특정 타입의 클래스에서만 사용하도록 제한할 수도 있다. 이떄는 믹스인 선언 부에 on 예약어로 해당 타입을 지정해준다.
mixin MyMixin on MySuper{}
class MySuper{}
class MyClass extends MySuper with Mixin{}
class MySomeClass with MyMixin{ } // 오류
- with 예약어를 통하여 믹스인을 사용할 수 있다. 하지만 클래스도 with를 사용할 수 있다.
class SomeClass{
int somedata = 10;
}
class MyClass with SomeClass{
void sayHello(){
print("$somedata");
}
}
- 그런데 만약 class에 생성자가 선언되어 있다면 with를 사용할 수 없다. 이유는 with는 mixin을 위한 예약어이고 mixin은 객체가 아니기 때문에 생성자를 가질 수 없다.
class User{
User(){}
}
class MyClass with User{ // 오류
}
반응형
'2023년 부터 > Flutter' 카테고리의 다른 글
[Flutter] GestureDetector안에 Button 사용시 Button의 onPress 동작하는 방법 (0) | 2024.03.26 |
---|---|
[Flutter] 버그 & 이슈(The following assertion was thrown building Scaffold(dirty, state: ScaffoldState#5a617(tickers: tracking 2 tickers)):No Directionality widget found.) (0) | 2024.03.26 |
Dart - 클래스와 객체 (0) | 2023.10.19 |
Dart - 함수와 제어문 (2) | 2023.10.19 |
Dart - 널 안정성 (0) | 2023.10.19 |