플러터 앱 개발

Chapter 11. 객체 지향 프로그래밍과 Dart C - 객체 지향과 상속

yuna 2026. 1. 12. 20:42

안녕하세요!

오늘은 객체 지향 프로그래밍과 다트 마지막 시간으로 돌아왔습니다!!

 

지난 시간 클래스와 메서드에 대해서 정리했는데요,

오늘은 상속에 대해서 알아보도록 하겠습니다 :)

 

상속....재산 상속...?

네! 물려 받는 뜻의 상속 맞습니다!!

상속은 아주 좋은것이죠..ㅎㅎ

미모를 그대로 물려받은 명수옹ㅋㅋㅋ

 


1. 상속

: 기존 클래스의 기능을 확장하여 새로운 클래스를 만드는 것

 

즉, 하나의 클래스가 다른 클래스의 속성과 메서드를 물려받는 것

물려주는 클래스는 부모 클래스,

물려받는 클래스는 자식 클래스이다.

 

형태

  • class [자식 클래스 이름] extends [부모 클래스 이름] { … }
// 부모 클래스
class Animal {
  void sound() {
    print('동물이 소리를 낸다');
  }
}

// 자식 클래스 (Animal을 상속)
class Dog extends Animal {
  void bark() {
    print('멍멍!');
  }
}

void main() {
  Dog dog = Dog();
  dog.sound(); // 부모 클래스에서 물려받은 메서드
  dog.bark();  // 자식 클래스의 메서드
}

 

 

특징

  • 부모 클래스는 자식 클래스에게 자신의 모든 속성과 메서드를 상속
  • 부모 클래스는 자식 클래스에 있는 멤버(속성, 메서드)를 사용할 수 없어요
  • super를 통해 자식 클래스가 부모 클래스의 속성과 메서드를 사용할 수 있다
class Animal {
  void sound() {
    print('소리');
  }
}

class Dog extends Animal {
  @override
  void sound() {
    super.sound(); // 부모 메서드
    print('멍멍');
  }
}

void main() {
  Dog().sound();
}

 

  • 자식 클래스는 상속 받은 속성과 메서드를 재정의하거나 기능 확장이 가능
    • @override: 재정의
    • 자식 클래스가 부모 클래스로부터 상속 받은 속성과 메서드를 그대로 사용하지 않고, 덮어 씌우는 것을 의미
    • 부모 클래스에 정의되어 있는 속성이나 메서드가 마음에 안 들어서 새로 정의하고 싶을 때 사용
    • @override [변수 이름] = [값]; -> 부모의 변수 값을 자식에서 교체
class Animal {
  String type = '동물';
}

class Dog extends Animal {
  @override
  String type = '개';
}

void main() {
  print(Dog().type); // 개
}

 

  • @override [반환 타입] [함수 이름]( ) { … } -> 부모 동작을 자식에서 재정의
class Animal {
  String sound() {
    return '소리';
  }
}

class Dog extends Animal {
  @override
  String sound() {
    return '멍멍';
  }
}

void main() {
  print(Dog().sound()); // 멍멍
}

 

  • 기능 확장할 경우
class Animal {
  void sound() {
    print('소리를 낸다');
  }
}

class Dog extends Animal {
  @override
  void sound() {
    super.sound(); // 부모 기능 유지
    print('멍멍');   // 기능 확장
  }
}

void main() {
  Dog().sound();
}

 

사용 이유

  • 공통적인 속성과 메서드를 부모 클래스에 정의하고, 공통되지 않는 요소들만 따로 자식 클래스에 정의해서 중복된 코드를 줄이고,
    코드의 재사용성을 높일 수 있다!
  • final로 정의하면 자식 클래스를 만들어서 상속할 수 없도록 만들 수 있다!
  • final class [클래스 이름] { … }

2. 객체 지향 프로그래밍 (Object-Oriented Programming)

  • 객체들을 사용하여 프로그램을 구성하는 방식

사용 이유

  • 클래스를 통해 틀을 정의해 두고, 여러 객체를 만들어서 사용
  • 클래스를 상속 받아서 기능을 확장할 수 있기 때문에 코드를 재사용할 수 있다.
  • 클래스를 통해 만든 객체들이 각각 독립적으로 동작하기 때문에 특정 객체를 수정해도 부작용이 생길 일이 적다.
class Coffee {
  String name;
  int price;

  Coffee(this.name, this.price);

  void order() {
    print('$name 주문 완료 ($price원)');
  }
}

void main() {
  Coffee americano = Coffee('아메리카노', 4500);
  Coffee latte = Coffee('라떼', 5000);

  americano.order();
  latte.order();
}