C++ 생성자 이해하기: 기본, 매개변수, 복사 생성자 완벽 해설
C++ 생성자 완벽 이해
C++ 생성자가 무엇인지, 왜 중요한지, 기본/매개변수/복사 생성자를 명확한 예제로 구현하는 방법을 다룹니다.
생성자는 객체 인스턴스화 시 **자동 실행되는 특수 멤버 함수**입니다. C++에서 생성자는 클래스와 이름이 같고 **반환 타입을 명시하지 않습니다**.
class Wall {
public:
// 생성자
Wall() {
// 초기화 코드
}
};
생성자는 다음을 만족해야 합니다:
- 클래스와 같은 이름
- 반환 타입 선언 안 함
- 접근 가능(보통
public)
기본 생성자(Default Constructor)
매개변수 없는 생성자를 **기본 생성자**라 합니다. 위 Wall()이 그 예입니다.
예제 1: 기본 생성자
// 기본 생성자 시연
#include <iostream>
using namespace std;
class Wall {
private:
double length;
public:
// 기본 생성자
Wall() {
length = 5.5;
cout << "Creating a wall." << endl;
cout << "Length = " << length << endl;
}
};
int main() {
Wall wall1;
return 0;
}
실행 결과
Creating a Wall
Length = 5.5
wall1 인스턴스화 시 기본 생성자가 length를 5.5로 설정하고 메시지 출력.
참고: 클래스에 명시적 생성자가 없으면 컴파일러가 아무 일도 안 하는 기본 생성자를 자동 생성합니다.
매개변수 생성자(Parameterized Constructor)
객체 생성 시 멤버 데이터를 초기화할 인수를 받는 생성자. 객체 상태 설정의 **권장 방식**입니다.
예제 2: 매개변수 생성자
// 매개변수 생성자로 벽 면적 계산
#include <iostream>
using namespace std;
class Wall {
private:
double length;
double height;
public:
// 매개변수 생성자
Wall(double len, double hgt) {
length = len;
height = hgt;
}
double calculateArea() {
return length * height;
}
};
int main() {
Wall wall1(10.5, 8.6);
Wall wall2(8.5, 6.3);
cout << "Area of Wall 1: " << wall1.calculateArea() << endl;
cout << "Area of Wall 2: " << wall2.calculateArea();
return 0;
}
실행 결과
Area of Wall 1: 90.3
Area of Wall 2: 53.55
생성자가 전달받은 값을 length, height에 할당해 calculateArea()가 면적 계산 가능하게 함.
복사 생성자(Copy Constructor)
복사 생성자는 기존 객체의 **정확한 복사본**으로 새 객체를 만듭니다. 같은 타입의 다른 객체로 초기화될 때 호출됩니다.
예제 3: 복사 생성자
#include <iostream>
using namespace std;
class Wall {
private:
double length;
double height;
public:
// 매개변수 생성자
Wall(double len, double hgt) {
length = len;
height = hgt;
}
// 복사 생성자
Wall(Wall &obj) {
length = obj.length;
height = obj.height;
}
double calculateArea() {
return length * height;
}
};
int main() {
Wall wall1(10.5, 8.6);
Wall wall2 = wall1; // 복사 생성자 호출
cout << "Area of Wall 1: " << wall1.calculateArea() << endl;
cout << "Area of Wall 2: " << wall2.calculateArea();
return 0;
}
실행 결과
Area of Wall 1: 90.3
Area of Wall 2: 90.3
복사 생성자가 wall1의 length, height를 wall2로 복사해 두 객체 상태가 동일해짐.
참고: 생성자는 주로 객체 초기화용이지만, 객체 생성 시 커스텀 로직 실행에도 활용됩니다.