728x90

✅ 1. 추상 클래스(abstract class)란?
Dart에서 추상 클래스는 다른 클래스들이 상속받도록 설계된 불완전한 클래스로 직접 인스턴스화 할 수 없고, 상속받은 클래스에서 구현해야 하는 맴버(메서드, getter/setter)를 가질 수 있습니다.
✅ 2. 추상 클래스(abstract class) 예제
abstract class SuperCar {
void makeSound(); // 추상 메서드, 구현 ❌
void speed() {
print("🏎️ Running!");
}
}
class Finish extends SuperCar {
@override
void makeSound() {
print("🚩 Finish!");
}
}
void main() {
// SuperCar a = SuperCar(); ❌ 추가 인스턴스 생성 불가
Finish car = Finish();
car.speed(); // 🏎️ Running
car.makeSound(); // 🚩 Finish
}
- SuperCar는 추상 클래스라 직접 인스턴스화 불가
- makeSound()는 추상 메서드이므로 상속받은 Dog 클래스에서 반드시 구현해야 함
- sleep()은 구현되어 있어 상속받은 클래스가 그대로 사용 가능
✅ 3. Dart에서 인터페이스
Dart에는 별도의 interface 키워드는 없음, 모든 클래스가 인터페이스 역할을 수행할 수 있으며 , 다른 클래스에 implements 키워드를 사용하면 인터페이스처럼 사용 가능
class Shoot {
void move() {}
}
class Game implements Shoot {
@override
void move() {
print("Player Moved!");
}
}
void main() {
Game game = Game();
game.move();
}
- Game implements Shoot
- Shoot 클래스의 모든 메서드를 구현해야 함
- 인터페이스는 상속(extends)과 달리 구현 부분만 강제함
- 즉, 메서드 이름만 맞으면 상속 구조와 무관하게 자유롭게 구현 가능
✅ 4. 추상 클래스와 인터페이스 차이
| 항목 | 추상 클래스(abstract) | 인터페이스(implements) |
| 키워드 | abstract | 없음, 기존 클래스 implements 사용 |
| 인스턴스화 | ❌ 직접 불가 | ❌ 직접 불가(단, 일반 클래스도 인터페이스로 사용 가능) |
| 상속 | extends | implements |
| 구현 강제 | 선택적(구현된 메서드도 가질 수 있음) | 반드시 구현해야 함 |
| 다중 상속 | ❌ 단일 상속 | ✅ 여러 인터페이스 구현 가능 |
✅ 5. 다중 인터페이스 구현
abstract class Car {
void start();
}
abstract class Stop {
void stop();
}
class Run implements Car, Stop {
@override
void start() {
print("Car start!");
}
@override
void stop() {
print("Stop!!");
}
}
void main() {
Run speed = Run();
speed.start(); // Car start!
speed.stop(); // Stop!
}
- 인터페이스는 다중 구현이 가능함
- 한 클래스가 여러 행동(Start, Stop)을 동시에 구현할 때 유용
✅ 6. 추상 클래스 + 인터페이스 혼합
abstract class Gear {
void secondStep();
void gear();
}
/// The abstract class Car defines a method level() that prints "first gear".
abstract class Car {
void level() {
print("first gear");
}
}
class Stop extends Car implements Gear {
@override
void secondStep() {
print("2rd Gear!");
}
@override
void gear() {
print("Gear Success!");
}
void thirdStep() {
print("3rd Gear!");
}
}
void main() {
Stop myCar = Stop();
myCar.level(); // 기본 메서드
myCar.gear(); // Gear 테스트
myCar.level(); // 1단
myCar.secondStep(); // 2단
myCar.thirdStep(); // 3단
}
- 추상 클래스로 기본 구현
- 인터페이스로 다른 행동을 강제로 구현함
- 실제 실무에서는 행동과 기본 특성을 분리할 때 사용
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] 12장 상속 (1) | 2025.08.17 |
| [Dart] 11장 생성자와 초기화 리스트 (3) | 2025.08.11 |
| [Dart] 10장 클래스와 객체 (2) | 2025.08.09 |
| [Dart] 9장 화살표 함수 (0) | 2025.08.05 |