C++ 생성자(Constructor)란?
클래스 생성자(constructor)는 해당 클래스의 새로운 객체가 생성될 때마다 자동으로 실행되는 특수한 멤버 함수입니다. 객체가 메모리에 만들어지는 순간 호출되기 때문에, 객체를 사용하기 전에 필요한 초기화 작업을 수행하는 역할을 담당합니다.
생성자는 클래스 이름과 정확히 동일한 이름을 가져야 하며, void를 포함한 어떠한 반환 타입도 가질 수 없습니다. 이러한 특징 덕분에 컴파일러는 일반 멤버 함수와 생성자를 쉽게 구별할 수 있습니다.
생성자의 핵심 특징
- 함수 이름이 클래스 이름과 반드시 같아야 한다
- 반환 타입이 없다 (void조차 사용하지 않는다)
- 객체가 생성되는 시점에 자동으로 호출된다
- 멤버 변수의 초기값을 설정하는 데 매우 유용하다
생성자를 활용하면 객체가 올바른 상태로 시작하도록 보장할 수 있어, 프로그램의 안정성과 코드의 가독성을 크게 높일 수 있습니다.
생성자 예제 코드
다음 예제는 C++에서 생성자가 어떻게 선언되고 동작하는지 보여줍니다.
#include <iostream>
using namespace std;
class Line {
public:
void setLength( double len );
double getLength( void );
Line(); // 이것이 생성자입니다
private:
double length;
};
// 생성자를 포함한 멤버 함수 정의
Line::Line(void) {
cout << "Object is being created" << endl;
}
void Line::setLength( double len ) {
length = len;
}
double Line::getLength( void ) {
return length;
}
// 프로그램의 main 함수
int main() {
Line line;
// 길이 설정
line.setLength(6.0);
cout << "Length of line : " << line.getLength() << endl;
return 0;
}실행 결과
Object is being created Length of line : 6
코드 분석
실행 결과를 살펴보면 흥미로운 점을 발견할 수 있습니다. main() 함수에서 Line line; 문장으로 객체를 선언한 순간, 별도의 호출 코드 없이도 "Object is being created"라는 메시지가 먼저 출력됩니다. 이것이 바로 생성자가 객체 생성 시점에 자동으로 호출된다는 것을 보여주는 증거입니다.
이후 setLength(6.0)을 통해 멤버 변수 length에 값을 저장하고, getLength()를 호출하여 값이 정상적으로 설정되었음을 확인합니다.
참고: 매개변수가 있는 생성자
위 예제처럼 매개변수가 없는 생성자를 기본 생성자(default constructor)라고 부릅니다. 실무에서는 객체 생성 시 초기값을 직접 전달받는 매개변수 생성자(parameterized constructor)도 함께 사용하는 경우가 많습니다. 예를 들어 Line(double len); 형태로 선언하면 Line line(6.0);처럼 객체를 생성하면서 동시에 길이를 초기화할 수 있어 더욱 편리합니다.