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

[Dart] 13장 추상 클래스와 인터페이스

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