안녕하세요!
오늘은 객체 지향 프로그래밍과 다트 마지막 시간으로 돌아왔습니다!!
지난 시간 클래스와 메서드에 대해서 정리했는데요,
오늘은 상속에 대해서 알아보도록 하겠습니다 :)
상속....재산 상속...?
네! 물려 받는 뜻의 상속 맞습니다!!
상속은 아주 좋은것이죠..ㅎㅎ

미모를 그대로 물려받은 명수옹ㅋㅋㅋ
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();
}'플러터 앱 개발' 카테고리의 다른 글
| [코드 뜯어보기] 쇼핑몰 앱 만들기 B (1) | 2026.01.16 |
|---|---|
| Chapter 12. 예외 처리 (1) | 2026.01.13 |
| Chapter 10. 객체 지향 프로그래밍과 Dart B - 클래스와 메서드 (1) | 2026.01.08 |
| Chapter 9. 객체 지향 프로그래밍과 Dart A - 클래스와 속성 (0) | 2026.01.07 |
| Chapter 8. 함수형 프로그래밍 B - 형변환 함수, 고차 함수 (0) | 2026.01.06 |