Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
Tags
- flutter 공부
- 영업 프레젠테이션
- CapCut은 자막 생성
- 고객 안내 영상 제작 등에서 비용과 시간을 크게 절감시키는 도구
- 디오·비디오 편집 및 전사(트랜스크립션) 소프트웨어
- 마케팅 팀
- 사용자가 텍스트를 입력아바타 영상을 자동 영상상성
- 자연스러운 음성으로 변환
- 텍스트 기반으로 오디오나 영상 콘텐츠를 편집
- Overdub 음성 합성
- 저화질 영상 개선 및 음성 잡음 제거.
- 긴 영상을 자동으로 쇼츠 형식으로 재구성.
- 교육용 e러닝
- SaaS창업
- dart 레코드 사용법
- dart 공부
- 화면 녹화 및 자막 생성
- 음성 변환(Text-to-Speech)
- 텍스트 기반 이미지 생성 및 영상 삽입 지원.
- pika labs
- AI 요약 및 자동 자막 생성 기능
- HeyGen은 인공지능 기반의 화상 아바타 생성 및 영상 제작 소프트웨어로
- 기업 교육 등에서 빠르게 전문 영상을 제작
- 클라우드 기반 협업 기능
- runway ml
- 고객지원 영상
- 속도 조절 등 기본 편집 기능 외에도 다양한 AI 기능을 제공
- 촬영 없는 영상 시대
- 텍스트나 이미지 프롬프트로 완성형 영상을 자동 제작
- 인공지능 콘텐츠의 윤리적 사용을 위한 내부 정책과 인간+AI 복합 검수 체계를 운영
Archives
- Today
- Total
IT Story
Dart Abstract 본문
Dart에서 추상 클래스(Abstract Class) 와 추상 메서드(Abstract Method) 는 객체 지향 프로그래밍에서 중요한 개념입니다. 추상 클래스는 인스턴스를 직접 생성할 수 없으며, 주로 다른 클래스들이 상속받아 사용할 기본 틀을 제공합니다. 추상 메서드는 본문(구현부)이 없는 메서드로, 이를 포함하는 클래스는 반드시 추상 클래스여야 합니다.

1. Dart 추상 클래스(Abstract Class)란?
추상 클래스는 abstract 키워드를 사용하여 선언됩니다.
이는 일반 클래스로는 인스턴스를 생성할 수 없으며, 반드시 상속받은 클래스에서 구현해야 하는 메서드를 정의하는 용도로 사용됩니다.
추상 클래스의 특징
- 객체 생성 불가 - 추상 클래스 자체로는 객체를 생성할 수 없습니다.
- 추상 메서드 포함 가능 - 본문이 없는 메서드를 포함할 수 있으며, 이를 반드시 서브클래스에서 구현해야 합니다.
- 일반 메서드 및 변수 포함 가능 - 추상 클래스는 일반 메서드와 변수를 가질 수 있습니다.
- 다른 클래스가 이를 상속받아 구현하도록 강제 - 공통적인 인터페이스 역할을 합니다.
2. 추상 클래스와 추상 메서드 예제
추상 클래스와 추상 메서드를 활용하는 기본적인 예제를 살펴보겠습니다.
(1) 기본적인 추상 클래스 및 추상 메서드 예제
// 추상 클래스 정의
abstract class Animal {
// 추상 메서드 (구현부 없음)
void makeSound();
// 일반 메서드 (구현부 있음)
void eat() {
print("음식을 먹습니다.");
}
}
// 서브 클래스에서 추상 메서드 구현
class Dog extends Animal {
@override
void makeSound() {
print("멍멍!");
}
}
class Cat extends Animal {
@override
void makeSound() {
print("야옹!");
}
}
void main() {
// Animal 클래스는 추상 클래스이므로 인스턴스를 직접 생성할 수 없음
// Animal animal = Animal(); // 오류 발생!
Dog dog = Dog();
dog.makeSound(); // "멍멍!"
dog.eat(); // "음식을 먹습니다."
Cat cat = Cat();
cat.makeSound(); // "야옹!"
cat.eat(); // "음식을 먹습니다."
}
설명
- Animal 클래스는 abstract 키워드를 사용하여 선언된 추상 클래스입니다.
- makeSound() 메서드는 본문이 없으므로 추상 메서드이며, 이를 반드시 하위 클래스에서 구현해야 합니다.
- eat() 메서드는 일반 메서드이므로 하위 클래스에서 재정의하지 않아도 사용할 수 있습니다.
- Dog 와 Cat 클래스는 Animal 클래스를 상속받아 makeSound() 메서드를 구현하였습니다.
(2) 추상 클래스가 여러 개의 서브 클래스를 가지는 예제
abstract class Vehicle {
// 추상 메서드 (각 차량마다 다르게 구현)
void move();
}
class Car extends Vehicle {
@override
void move() {
print("자동차가 도로 위를 달립니다.");
}
}
class Airplane extends Vehicle {
@override
void move() {
print("비행기가 하늘을 날아갑니다.");
}
}
class Boat extends Vehicle {
@override
void move() {
print("배가 물 위를 떠다닙니다.");
}
}
void main() {
Car car = Car();
car.move(); // "자동차가 도로 위를 달립니다."
Airplane airplane = Airplane();
airplane.move(); // "비행기가 하늘을 날아갑니다."
Boat boat = Boat();
boat.move(); // "배가 물 위를 떠다닙니다."
}
설명
- Vehicle 추상 클래스는 move()라는 추상 메서드를 가지고 있습니다.
- Car, Airplane, Boat 클래스가 Vehicle 클래스를 상속받아 각기 다른 방식으로 move() 메서드를 구현합니다.
- move()는 각 클래스에서 고유한 방식으로 재정의되어 사용됩니다.
(3) 추상 클래스에 일반 메서드와 변수 포함
abstract class Employee {
String name;
int salary;
Employee(this.name, this.salary);
// 추상 메서드
void work();
// 일반 메서드
void showSalary() {
print("$name의 월급은 $salary 원입니다.");
}
}
class Developer extends Employee {
Developer(String name, int salary) : super(name, salary);
@override
void work() {
print("$name이(가) 코드를 작성하고 있습니다.");
}
}
class Designer extends Employee {
Designer(String name, int salary) : super(name, salary);
@override
void work() {
print("$name이(가) 디자인을 그리고 있습니다.");
}
}
void main() {
Developer dev = Developer("철수", 5000000);
dev.work(); // "철수이(가) 코드를 작성하고 있습니다."
dev.showSalary(); // "철수의 월급은 5000000 원입니다."
Designer des = Designer("영희", 4000000);
des.work(); // "영희이(가) 디자인을 그리고 있습니다."
des.showSalary(); // "영희의 월급은 4000000 원입니다."
}
설명
- Employee 추상 클래스는 name과 salary 변수를 가지고 있으며, 생성자를 정의하여 이를 초기화합니다.
- work() 메서드는 추상 메서드로 선언되어 서브클래스에서 반드시 구현해야 합니다.
- showSalary()는 일반 메서드로, 각 직원의 월급을 출력합니다.
- Developer 와 Designer 클래스는 Employee를 상속받고, work()를 각각 다르게 구현했습니다.

3. 추상 클래스를 사용하는 이유
✅ 코드의 재사용성 증가
- 중복되는 코드(일반 메서드, 변수)를 한 곳에서 정의하고 상속받아 사용할 수 있습니다.
✅ 일관성 유지
- 특정 메서드(move(), work() 등)를 반드시 구현하도록 강제하여, 클래스를 일관되게 사용할 수 있습니다.
✅ 유지보수 및 확장 용이
- 새로운 기능을 추가할 때 공통적인 기능은 부모 클래스에 추가하고, 개별적인 기능은 서브클래스에서 구현할 수 있습니다.

4. 인터페이스와의 차이점
Dart에서는 추상 클래스 외에도 인터페이스(interface) 역할을 하는 것이 가능합니다.
Dart에는 interface 키워드가 없지만, 클래스를 implements 키워드를 사용하여 인터페이스처럼 사용할 수 있습니다.
- 추상 클래스(abstract class)
- extends 키워드를 사용하여 상속.
- 일반 메서드와 변수를 포함할 수 있음.
- 단일 상속만 가능.
- 인터페이스(implements 활용)
- implements 키워드를 사용하여 여러 개의 클래스를 구현할 수 있음.
- 모든 메서드를 강제로 오버라이드해야 함.

5. 결론
Dart의 추상 클래스와 추상 메서드는 코드의 구조를 정리하고, 유지보수성을 높이며, 중복을 줄이는 중요한 개념입니다.
이를 활용하면 객체 지향 프로그래밍의 강력한 기능을 활용할 수 있으며, 일관된 인터페이스를 제공하는 역할을 합니다.
✅ 추상 클래스를 활용하여 효율적인 코드 구조를 설계해 보세요! 🚀
'Programming > Dart' 카테고리의 다른 글
| Dart Static (0) | 2025.04.03 |
|---|---|
| Dart Generic (0) | 2025.04.03 |
| Dart Mixins (0) | 2025.03.28 |
| Dart Interface (0) | 2025.03.27 |
| Dart Override (0) | 2025.03.27 |