자바스크립트를 허용해주세요.
[ 자바스크립트 활성화 방법 ]
from Mohon Aktifkan Javascript!
 

[Dart] 12장 상속

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