Dart 프로그래밍 언어의 입문자를 대상으로 객체지향 프로그래밍의 기본 원리를 이해하고, Dart에서 생성자와 소멸자, 그리고 관련 메서드를 사용하는 방법을 이해할 수 있도록 정리해 봤습니다. 예제 코드를 통해 실습을 유도하고, 실제로 코드를 작성할 수 있을 만큼 상세히 설명하였습니다.
객체지향 프로그래밍 - 생성자와 소멸자
생성자 (Constructor)
생성자는 객체가 생성될 때 자동으로 호출되는 특별한 메서드입니다. 객체의 초기화 작업을 담당합니다. Dart에서는 클래스 이름과 동일한 이름을 가진 메서드가 생성자로 사용됩니다.
생성자의 역할
- 객체의 초기화
- 필수적으로 필요한 초기 데이터 설정
기본 생성자 예제
class Person {
String name;
int age;
// 생성자
Person(this.name, this.age);
void introduce() {
print('안녕하세요, 제 이름은 $name이고, 나이는 $age입니다.');
}
}
void main() {
Person person = Person('철수', 20);
person.introduce(); // 안녕하세요, 제 이름은 철수이고, 나이는 20입니다.
}
생성자의 종류
- 기본 생성자: 위의 예제처럼 클래스 이름과 동일한 생성자.
- 명명된 생성자(Named Constructor): 클래스 내에서 여러 개의 생성자를 만들 때 사용.
명명된 생성자 예제
class Point {
int x;
int y;
// 기본 생성자
Point(this.x, this.y);
// 명명된 생성자
Point.origin() {
x = 0;
y = 0;
}
void display() {
print('Point($x, $y)');
}
}
void main() {
Point p1 = Point(10, 20);
p1.display(); // Point(10, 20)
Point p2 = Point.origin();
p2.display(); // Point(0, 0)
}
소멸자 (Destructor)
소멸자는 객체가 더 이상 사용되지 않을 때 호출되는 특별한 메서드입니다. Dart에서는 명시적인 소멸자가 없고, 가비지 컬렉터(Garbage Collector)가 메모리 관리를 자동으로 처리합니다. 따라서 소멸자에 대해 신경 쓸 필요가 없습니다.
그러나 객체가 삭제될 때 특정 동작이 필요하다면, 대신 dispose 메서드를 정의하고 수동으로 호출할 수 있습니다.
dispose 메서드 예제
class Resource {
void open() {
print('리소스를 열었습니다.');
}
void close() {
print('리소스를 닫았습니다.');
}
}
void main() {
Resource resource = Resource();
resource.open();
// 리소스 사용 후 직접 닫아줘야 함
resource.close();
}
실습 문제
- Car 클래스를 만들어 보세요. Car 클래스는 다음과 같은 속성을 가집니다.
- make (제조사)
- model (모델명)
- year (제조 연도)
- BankAccount 클래스를 만들어 보세요. BankAccount 클래스는 다음과 같은 속성을 가집니다.
- accountNumber (계좌 번호)
- balance (잔액)
위의 실습 문제를 해결해 보면서 Dart에서 생성자와 메서드를 활용하는 방법을 익혀보세요.
Car 클래스 예제 답안
class Car {
String make;
String model;
int year;
// 생성자
Car(this.make, this.model, this.year);
void displayInfo() {
print('제조사: $make, 모델명: $model, 제조 연도: $year');
}
}
void main() {
Car car = Car('Hyundai', 'Sonata', 2021);
car.displayInfo(); // 제조사: Hyundai, 모델명: Sonata, 제조 연도: 2021
}
BankAccount 클래스 예제 답안
class BankAccount {
String accountNumber;
double balance;
// 생성자
BankAccount(this.accountNumber, this.balance);
void deposit(double amount) {
balance += amount;
print('입금 후 잔액: $balance');
}
void withdraw(double amount) {
if (balance >= amount) {
balance -= amount;
print('출금 후 잔액: $balance');
} else {
print('잔액 부족');
}
}
}
void main() {
BankAccount account = BankAccount('123-456-789', 1000.0);
account.deposit(500.0); // 입금 후 잔액: 1500.0
account.withdraw(200.0); // 출금 후 잔액: 1300.0
account.withdraw(2000.0); // 잔액 부족
}
이 글을 통해 생성자와 소멸자에 대해 이해하고, 실제로 코드를 작성해 보면서 객체지향 프로그래밍의 기본 개념을 익힐 수 있을 것입니다.
'프로그래밍 언어 > Dart' 카테고리의 다른 글
Dart에서 추상 클래스와 인터페이스 사용 방법, 클래스 상속과 구현 가이드 - Dart 기초 #11 (0) | 2024.06.13 |
---|---|
Dart 상속과 다형성: 예제 코드로 배우는 객체 지향 프로그래밍 - Dart 기초 #10 (0) | 2024.06.12 |
Dart 객체지향 프로그래밍: 클래스와 객체 이해하기 - Dart 기초 #8 (0) | 2024.06.10 |
Dart 프로그래밍 입문자를 위한 함수와 메소드 정의 및 사용법 - Dart 기초 #7 (0) | 2024.06.08 |
Dart List와 Map 완벽 가이드, 조건문과 반복문 예제 포함 - Dart 기초 #6 (0) | 2024.06.07 |