C++ 초급 - 7. 구조체와 클래스 (3 - 생성자와 소멸자 (Constructor & Destructor))
2025. 2. 22. 14:04ㆍ프로그래밍 언어/C++
📌 7.3 생성자와 소멸자 (Constructor & Destructor)
클래스에는 객체가 생성될 때 자동으로 호출되는 생성자(Constructor)와 객체가 소멸될 때 호출되는 소멸자(Destructor)가 존재한다.
이들은 객체의 초기화 및 메모리 정리 역할을 수행하며, 객체 지향 프로그래밍(OOP)에서 필수적인 개념이다.
📌 1. 생성자 개념 및 역할
🔹 (1) 생성자란?
생성자(Constructor)는 객체가 생성될 때 자동으로 호출되는 함수이다.
- 클래스와 동일한 이름을 가짐.
- 반환값을 가지지 않음 (void조차 사용하지 않음).
- 객체가 생성될 때 자동 실행됨.
💡 기본 문법
class 클래스이름 {
public:
클래스이름(); // 생성자 선언
};
💡 예제: 기본 생성자
#include <iostream>
class Car {
public:
Car() { // 생성자 정의
std::cout << "자동차 객체 생성!" << std::endl;
}
};
int main() {
Car car1; // 생성자가 자동 호출됨
return 0;
}
🔹 출력 결과
자동차 객체 생성!
💡 설명
- Car() 생성자가 객체 car1 생성 시 자동으로 호출됨.
📌 2. 매개변수를 받는 생성자 (오버로딩)
🔹 (1) 생성자 오버로딩
- 매개변수를 받는 생성자를 사용하면 객체를 다양한 방법으로 초기화 가능.
- 기본 생성자 + 여러 개의 생성자를 정의하여 오버로딩 가능.
💡 예제: 생성자 오버로딩
#include <iostream>
class Car {
private:
std::string brand;
int year;
public:
// 기본 생성자
Car() {
brand = "Unknown";
year = 0;
std::cout << "기본 생성자 호출!" << std::endl;
}
// 매개변수를 받는 생성자
Car(std::string b, int y) {
brand = b;
year = y;
std::cout << "매개변수 생성자 호출: " << brand << " (" << year << ")" << std::endl;
}
void printInfo() {
std::cout << "브랜드: " << brand << ", 연식: " << year << std::endl;
}
};
int main() {
Car car1; // 기본 생성자 호출
Car car2("Toyota", 2022); // 매개변수 생성자 호출
car1.printInfo();
car2.printInfo();
return 0;
}
🔹 출력 결과
기본 생성자 호출!
매개변수 생성자 호출: Toyota (2022)
브랜드: Unknown, 연식: 0
브랜드: Toyota, 연식: 2022
💡 설명
- Car() → 기본 생성자 호출.
- Car("Toyota", 2022); → 매개변수를 받는 생성자 호출.
- 생성자 오버로딩을 통해 다양한 초기화 방식 제공.
📌 3. 소멸자의 역할과 자동 호출
🔹 (1) 소멸자란?
- 객체가 소멸될 때 자동 호출되는 함수.
- 클래스 이름 앞에 ~(틸드)를 붙여 선언.
- 반환값이 없으며, 매개변수를 받을 수 없음.
- 메모리 해제 및 정리 작업을 수행.
💡 기본 문법
class 클래스이름 {
public:
~클래스이름(); // 소멸자 선언
};
💡 예제: 소멸자 자동 호출
#include <iostream>
class Car {
public:
Car() { std::cout << "자동차 객체 생성!" << std::endl; }
~Car() { std::cout << "자동차 객체 소멸!" << std::endl; }
};
int main() {
Car car1; // 생성자가 자동 호출됨
return 0; // 함수 종료 시 소멸자가 자동 호출됨
}
🔹 출력 결과
자동차 객체 생성!
자동차 객체 소멸!
💡 설명
- Car() → 객체 생성 시 생성자가 호출됨.
- ~Car() → 객체 소멸 시 소멸자가 자동 호출됨.
📌 4. 동적 메모리 할당과 소멸자 활용 (new/delete)
🔹 (1) new 연산자로 객체 동적 할당
- new 키워드를 사용하면 객체를 동적으로 생성 가능.
- 동적으로 할당된 객체는 delete를 사용하여 수동으로 해제해야 함.
💡 예제: new 연산자로 동적 할당
#include <iostream>
class Car {
public:
Car() { std::cout << "자동차 객체 생성!" << std::endl; }
~Car() { std::cout << "자동차 객체 소멸!" << std::endl; }
};
int main() {
Car* carPtr = new Car(); // 동적 객체 생성
delete carPtr; // 수동으로 객체 해제 (소멸자 호출)
return 0;
}
🔹 출력 결과
자동차 객체 생성!
자동차 객체 소멸!
💡 설명
- new Car(); → 객체를 동적으로 생성.
- delete carPtr; → 소멸자가 호출되며 객체가 메모리에서 해제됨.
📌 5. 정리
개념 | 설명 |
생성자(Constructor) | 객체가 생성될 때 자동 호출 |
기본 생성자 | 클래스명() { ... } |
매개변수 생성자 | 클래스명(타입 변수) { ... } |
생성자 오버로딩 | 여러 개의 생성자 정의 가능 |
소멸자(Destructor) | 객체가 소멸될 때 자동 호출 (~클래스명() { ... }) |
동적 객체 생성 | new 키워드 사용 (new 클래스명();) |
객체 해제 | delete 사용 (delete 포인터;) |
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 초급 - 7. 구조체와 클래스 (5 - this 포인터) (0) | 2025.02.22 |
---|---|
C++ 초급 - 7. 구조체와 클래스 (4 - 접근 지정자 (private, public, protected)) (0) | 2025.02.22 |
C++ 초급 - 7. 구조체와 클래스 (2 - 클래스 (class vs struct)) (0) | 2025.02.22 |
C++ 초급 - 7. 구조체와 클래스 (1 - 구조체 (struct)) (0) | 2025.02.22 |
C++ 초급 - 6. 배열과 문자열 (5 - std::string (C++ 표준 문자열)) (0) | 2025.02.22 |