Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- 인프라
- 자바네트워크
- 고전역학
- DART
- 자바
- Java
- 파이썬
- flutter
- Database
- write by GPT-4
- 시스템
- python
- spring data jpa
- 데이터베이스
- kotlin
- 유닉스
- 신재생에너지 발전설비 기사
- 소프트웨어공학
- write by chatGPT
- oracle
- 코틀린
- chatGPT's answer
- flet
- spring integration
- 역학
- jpa
- 리눅스
- NIO
- GPT-4's answer
- mobile programming
Archives
- Today
- Total
기억을 지배하는 기록
Dart 믹스인 (Mixin) 본문
728x90
Dart 믹스인 (Mixin)
Mixin은 Dart에서 다중 상속 없이 코드 재사용성을 높이는 방법입니다.
클래스에 추가적인 기능을 제공하면서도 클래스 계층 구조를 단순하게 유지할 수 있습니다.
1. Mixin 개념
- 다중 상속이 불가능한 Dart에서 코드 재사용을 위해 사용됨
- with 키워드를 사용하여 기존 클래스에 믹스인 기능 추가 가능
- 상속(Inheritance)과 다름 (Mixin은 부모-자식 관계가 아님)
- 인터페이스(implements)와도 다름 (Mixin은 강제 구현 필요 없음)
2. Mixin 기본 문법
mixin Swimmable {
void swim() {
print("수영할 수 있습니다. 🏊");
}
}
class Fish with Swimmable {}
void main() {
Fish fish = Fish();
fish.swim(); // 수영할 수 있습니다. 🏊
}
수영할 수 있습니다. 🏊
- Fish 클래스는 Swimmable 믹스인을 가져와 swim() 메서드를 사용할 수 있음
3. Mixin을 여러 개 추가하기
여러 개의 믹스인을 사용할 수도 있습니다.
mixin Swimmable {
void swim() {
print("수영할 수 있습니다. 🏊");
}
}
mixin Flyable {
void fly() {
print("날 수 있습니다. 🕊️");
}
}
class Duck with Swimmable, Flyable {}
void main() {
Duck duck = Duck();
duck.swim(); // 수영할 수 있습니다. 🏊
duck.fly(); // 날 수 있습니다. 🕊️
}
수영할 수 있습니다. 🏊
날 수 있습니다. 🕊️
- Duck 클래스는 Swimmable과 Flyable 믹스인을 가져와 두 기능을 모두 사용할 수 있음
4. Mixin과 상속(extends)의 차이
4.1. 상속 (extends)
- 부모 클래스로부터 모든 속성과 메서드를 상속받음
- 단일 상속만 가능 (extends는 한 개의 부모 클래스만 가질 수 있음)
class Animal {
void eat() {
print("먹을 수 있습니다. 🍽️");
}
}
class Dog extends Animal {}
void main() {
Dog dog = Dog();
dog.eat(); // 먹을 수 있습니다. 🍽️
}
4.2. Mixin (with)
- 믹스인은 클래스와 관계없이 기능을 추가할 수 있음
- 다중 믹스인 가능 (여러 개 사용 가능)
mixin Barkable {
void bark() {
print("짖을 수 있습니다. 🐶");
}
}
class Dog with Barkable {}
void main() {
Dog dog = Dog();
dog.bark(); // 짖을 수 있습니다. 🐶
}
- 믹스인은 기존 클래스를 변경하지 않고도 기능을 확장할 수 있음
5. Mixin 내부에서 super 사용
믹스인은 super 키워드를 통해 상속받은 클래스의 메서드를 오버라이드할 수도 있습니다.
class Animal {
void move() {
print("이동 중...");
}
}
mixin Flyable on Animal {
@override
void move() {
super.move();
print("날아갑니다! 🕊️");
}
}
class Bird extends Animal with Flyable {}
void main() {
Bird bird = Bird();
bird.move();
}
이동 중...
날아갑니다! 🕊️
- Mixin에서 super를 사용하면 부모 클래스의 메서드를 호출할 수 있음
6. Mixin을 특정 클래스에서만 사용 (on 키워드)
Dart에서는 on 키워드를 사용하여 믹스인이 특정 부모 클래스를 상속한 경우에만 사용되도록 제한할 수 있습니다.
class Animal {
void move() {
print("이동 중...");
}
}
// Bird 또는 Animal을 상속한 클래스에서만 사용 가능
mixin Flyable on Animal {
void fly() {
print("날아갑니다. 🕊️");
}
}
class Bird extends Animal with Flyable {} // 가능
class Fish extends Animal {} // 가능
// class Plane with Flyable {} // 오류 발생 (Animal을 상속하지 않음)
void main() {
Bird bird = Bird();
bird.fly(); // 날아갑니다. 🕊️
}
- on Animal을 사용하면 Flyable 믹스인은 Animal을 상속한 클래스에서만 사용 가능
- Plane 클래스는 Animal을 상속하지 않으므로 Flyable을 사용할 수 없음
7. Mixin을 활용한 실전 예제
Mixin을 사용하여 여러 개의 역할을 조합할 수 있습니다.
mixin Walkable {
void walk() {
print("걸을 수 있습니다. 🚶");
}
}
mixin Runnable {
void run() {
print("뛸 수 있습니다. 🏃");
}
}
class Person with Walkable, Runnable {}
void main() {
Person person = Person();
person.walk(); // 걸을 수 있습니다. 🚶
person.run(); // 뛸 수 있습니다. 🏃
}
- Mixin을 사용하면 중복 없이 여러 기능을 조합하여 사용할 수 있음
8. Mixin vs 인터페이스 (Interface)
특징 | Mixin | Interface |
목적 | 기능 추가 | 강제 구현 |
사용법 | with 사용 | implements 사용 |
메서드 구현 | 선택 사항 | 반드시 구현해야 함 |
다중 사용 | 여러 개 가능 | 여러 개 가능 |
인터페이스(Interface) 예제
abstract class Animal {
void makeSound(); // 구현 강제
}
class Dog implements Animal {
@override
void makeSound() {
print("멍멍! 🐶");
}
}
void main() {
Dog dog = Dog();
dog.makeSound(); // 멍멍! 🐶
}
- implements는 반드시 모든 메서드를 구현해야 함
- Mixin은 with를 사용하여 기능을 추가할 뿐 강제하지 않음
9. Dart 믹스인(Mixin) 정리
개념 | 설명 |
Mixin 정의 | mixin MixinName {} |
Mixin 사용 | class MyClass with MixinName {} |
여러 개 사용 | class MyClass with Mixin1, Mixin2 {} |
on 키워드 | 특정 부모 클래스를 상속한 경우만 믹스인 가능 |
super 사용 | 부모 클래스의 메서드를 오버라이드할 때 사용 가능 |
인터페이스와 차이점 | Mixin은 메서드 구현이 선택 사항, Interface는 강제 구현 |
728x90
'Flutter for Beginners' 카테고리의 다른 글
Dart 개발자 가이드 (코딩 스타일 & 협업 가이드) (0) | 2025.02.25 |
---|---|
Dart: Generics, Static, Cascade Operator (0) | 2025.02.25 |
Dart 객체지향 프로그래밍 - 상속(Inheritance) (0) | 2025.02.24 |
Dart 객체지향 프로그래밍 - 클래스와 객체 (0) | 2025.02.24 |
Dart 화살표 함수 (0) | 2025.02.21 |
Comments