flutter로 프로젝트를 만들면서
대부분의 키워드 같은 경우는 잘 사용한다고 생각했는데,
mixin과 with는 헷갈리는 부분이 있어서 다시 정리를 해보려 해요.
1. extends
extends는 흔히 우리가 다른 언어에서 상속으로 사용하는 키워드예요.
dart 언어에서는 다중 상속이 불가능하고,
모든 속성과 메소드들을 상속받기 때문에 특별한 구현 없이 바로 사용이 가능해요.
※ 당연한 이야기 이지만 abstract class를 상속받으면 구현을 해주어야 해요. 하지만 abstract class 도 함수 몸체를 구현해 놓았다면, 따로 구현할 필요는 없어요!
class CheesePizza extends Pizza {
String name() {
return "나는 치즈 피자에요";
}
}
class Pizza {
int price() {
return 0;
}
}
2. implements
implements를 사용하면 여러 부모 클래스를 가질 수 있어요, 하지만 하위 클래스에서 모든 메서드를 오버라이딩으로 구현을 해줘야 해요.
※ class, abstract class, mixin 함수의 몸체가 구현되어 있더라도 오버라이딩으로 재 구현이 필요해요.
class CheesePizza implements Price {
String name() {
return "나는 치즈 피자에요";
}
@override
int getPrice() {
return 10000;
}
}
abstract class Price {
int getPrice();
}
3. with
with는 여러 개의 부모 클래스를 가질 수 있어요, 메서드를 따로 구현하지 않아도 부모에서 구현된 메서드 호출이 가능해요.
※ abstract class 는 오버라이드 메서드를 만들어줘야 해요!
class CheesePizza with Pizza {
String name() {
return "나는 치즈 피자에요";
}
int getPrice() {
return price() + 100;
}
}
class Pizza {
int price() {
return 10000;
}
}
4. mixin
Dart 언어에서는 다중상속이 안되기 때문에 class 대신 mixin을 사용하는데, 쉽게 말하면 생성자가 없는 class라고 생각하면 돼요.
※ 함수 몸체를 선언하지 않으면 오버라이드 메서드를 만들어줘야 해요.
class CheesePizza with Pizza {
String name() {
return "나는 치즈 피자에요";
}
int getPrice() {
return price() + 100;
}
}
mixin Pizza {
int price() {
return 10000;
}
}
추가로 사용 범위 한정도 가능해요!
아래 코드는 Pizza가 반드시 Food를 상속받는 클래스에서만 사용될 수 있다고 선언한 코드예요.
class CheesePizza extends Food with Pizza {
String name() {
return "나는 치즈 피자에요";
}
int getPrice() {
return price() + 100;
}
}
abstract class Food {}
mixin Pizza on Food{
int price() {
return 10000;
}
}
5. abstract
추상 클래스는 인스턴스화가 불가능한 클래스에요. 다트에서는 선언과 정의까지 가능해요.
물론 정의를 하면 따로 오버라이드 하지 않아도 바로 사용이 가능해요.
class CheesePizza extends Food with Pizza {
int getPrice() {
return price() + 100;
}
@override
String name() {
return "나는 치즈 피자에요";
}
}
abstract class Food {
String name();
}
mixin Pizza on Food{
int price() {
return 10000;
}
}
'공부방 > Flutter' 카테고리의 다른 글
Flutter 그려진 모든 원들이 연결 되도록 만들기 (Make all drawn circles connect) (0) | 2023.06.23 |
---|---|
Flutter 원으로 피라미드 그리기 (flutter Draw a Pyramid with Circles) (0) | 2023.06.23 |
Bloc vs Cubit (0) | 2023.03.27 |
Flutter Bloc 필수적으로 사용하는 위젯 (0) | 2023.03.23 |
플러터 상태관리 bloc (0) | 2023.03.23 |
행복한 코딩을 위하여!
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!