728x90
✅ 1. 상속
Dart에서 상속(Inheritance)은 Dart 객체지향 언어로 인해 클래스 상속을 지원합니다, 상속을 이용해 기존 클래스의 속성과 메서드를 재사용하고, 필요 시 오버리아드(재정의)할 수 있습니다.
class Animal {
void breath() {
print("숨을 쉼");
}
}
class Dog extends Animal {
void bark() {
print("멍멍!");
}
}
void main() {
Dog dog = Dog();
dog.breath(); // 부모 클래스 메서드 사용 가능
dog.bark(); // 자식 클래스 메서드
}
- extends 키워드를 사용하면 한 클래스가 다른 클래스를 상속
- 자식 클래스는 부모 클래스의 모든 public 맴버(필드, 메서드)를 사용 가능
- Dart는 단일 상속만 지원(한 클래스는 오직 하나의 클래스만 상속 가능)
✅ 2. 생성자 상속
부모 클래스 생성자를 그대로 사용할 수 있으며 필요 시 자식 클래스에서 super를 이용해 부모 생성자를 호출 할 수 있습니다.
class Animal {
String name;
Animal(this.name); // 생성자
}
class Dog extends Animal {
Dog(String name) : super(name); // 부모 생성자 호출
}
void main() {
Dog dog = Dog("Jimmy");
print(dog.name);
}
✅ 3. 메서드 오버라이드
class Animal {
void speak() {
print("Animal on Speak");
}
}
class Dog extends Animal {
@override
void speak() {
print("Woof!");
}
}
void main() {
Animal animal = Animal();
animal.speak(); // Animal on Speak
Dog dog = Dog();
dog.speak(); // Woof!
}
- @override 어노테이션은 부모 클래스 메서드를 재정의할 때 사용함
- 선택사항이나 작성 시 코드 가독성과 안정성이 올라감
✅ 4. 접근 제어
// 📂 animal.dart
class Animal {
String name; // public(어디서나 접근 가능)
int _age; // private(같은 라이브러리 안에서만 접근 가능)
Animal(this.name, this._age);
void printInfo() {
print("이름: $name, 나이: $_age");
}
}
// 📂 main.dart
import "animal.dart";
void main() {
Animal a = Animal("Poppy", 2);
print(a.name); // ✅ 가능 (public 맴버)
// print(a._age); // 🚫 에러: private 맴버는 다른 라이브러리에서 접근 불가
a.printInfo(); // ✅ 내부에서 _age 사용 가능
}
📌 자식 클래스에서 접근
import 'animal.dart';
class Dog extends Animal {
Dog(String name, int age) : super(name, age);
void showInfo() {
print("이름: $name"); // ✅ public 맴버 접근 가능
// print("나이: $_age"); // 🚫 private 맴버 접근 불가
}
}
void main() {
Animal b = Dog("King", 3);
print(b.name);
}
- Dart에는 private 필드/메서드가 있음
- _(언더스코어)로 시작하는 이름은 같은 라이브러리 내에서만 접근 가능
- 즉, _privateMethod는 자식 클래스에서 접근 불가능
✅ 5. 다중 상속 대신 믹스인(mixin) 사용
Dart는 단일 상속만 지원하며, 여러 기능을 가져오려면 mixin을 사용합니다.
class Animal {
void breathe() {
print("Health");
}
}
mixin Flyer {
void fly() {
print("Fly");
}
}
class Bird extends Animal with Flyer {}
void main() {
Bird bird = Bird();
bird.breathe(); // 부모 클래스 Animal 매서드
bird.fly(); // 믹스인 Flyer
}
- with 키워드를 사용하면 믹스인을 추가할 수 있음
GitHub - Koras02/dart-bloging
Contribute to Koras02/dart-bloging development by creating an account on GitHub.
github.com
728x90
LIST
'Mobile > Dart' 카테고리의 다른 글
[Dart] 14장 믹스인 (0) | 2025.09.08 |
---|---|
[Dart] 13장 추상 클래스와 인터페이스 (0) | 2025.08.30 |
[Dart] 11장 생성자와 초기화 리스트 (3) | 2025.08.11 |
[Dart] 10장 클래스와 객체 (2) | 2025.08.09 |
[Dart] 9장 화살표 함수 (0) | 2025.08.05 |