C++에서 생성자(Constructor)는 클래스의 새로운 객체가 생성될 때 자동으로 실행되는 특별한 멤버 함수입니다. 생성자는 클래스와 이름이 같아야 하며, void를 포함한 어떠한 반환 타입도 가지지 않는다는 특징이 있습니다. 생성자의 주된 용도는 객체가 생성되는 시점에 클래스의 멤버 변수에 초기값을 설정해 주는 것입니다.
C++의 생성자는 크게 두 가지 유형으로 나눌 수 있으며, 각각의 특징과 사용법을 자세히 살펴보겠습니다.
1. 기본 생성자(Default Constructor)
기본 생성자는 매개변수를 받지 않는 생성자입니다. 프로그래머가 명시적으로 기본 생성자를 정의하지 않으면, 컴파일러가 자동으로 암시적 기본 생성자를 제공합니다. 이 경우 멤버 변수들은 기본값인 0으로 초기화됩니다.
다음은 기본 생성자의 동작을 보여주는 예제 코드입니다.
예제
#include <iostream>
using namespace std;
class A {
private:
int num1, num2 ;
public:
A() {
num1 = 5;
num2 = 7;
}
void display() {
cout<<"num1 = "<< num1 <<endl;
cout<<"num2 = "<< num2 <<endl;
}
};
int main() {
A obj;
obj.display();
return 0;
}실행 결과
num1 = 5 num2 = 7
위 프로그램에서 클래스 A는 num1과 num2를 각각 5와 7로 초기화하는 기본 생성자를 포함하고 있습니다. 또한 두 변수의 값을 출력하는 display() 함수도 함께 정의되어 있습니다. 해당 코드는 다음과 같습니다.
class A {
private:
int num1, num2 ;
public:
A() {
num1 = 5;
num2 = 7;
}
void display() {
cout<<"num1 = "<< num1 <<endl;
cout<<"num2 = "<< num2 <<endl;
}
};main() 함수에서는 클래스 A 타입의 객체를 정의한 뒤, display() 함수를 호출하여 초기화된 값을 확인합니다.
A obj; obj.display();
객체 obj가 선언되는 순간 기본 생성자가 자동으로 호출되어 멤버 변수들이 초기화됩니다.
2. 매개변수 생성자(Parameterized Constructor)
매개변수 생성자는 인자(argument)를 전달받아 객체 생성 시 원하는 값으로 초기화할 수 있는 생성자입니다. 매개변수는 일반 함수에 인자를 추가하듯이 동일한 방식으로 작성하며, 객체 생성 시 암묵적(implicit) 또는 명시적(explicit)으로 호출할 수 있다는 장점이 있습니다.
다음은 매개변수 생성자의 동작을 보여주는 예제 코드입니다.
예제
#include <iostream>
using namespace std;
class A {
private:
int num1, num2 ;
public:
A(int n1, int n2) {
num1 = n1;
num2 = n2;
}
void display() {
cout<<"num1 = "<< num1 <<endl;
cout<<"num2 = "<< num2 <<endl;
}
};
int main() {
A obj(3,8);
obj.display();
return 0;
}실행 결과
num1 = 3 num2 = 8
위 프로그램에서 클래스 A는 매개변수로 전달받은 값 n1과 n2를 사용해 num1과 num2를 초기화하는 매개변수 생성자를 포함하고 있습니다. 마찬가지로 값을 출력하는 display() 함수도 정의되어 있습니다. 해당 코드는 다음과 같습니다.
class A {
private:
int num1, num2 ;
public:
A(int n1, int n2) {
num1 = n1;
num2 = n2;
}
void display() {
cout<<"num1 = "<< num1 <<endl;
cout<<"num2 = "<< num2 <<endl;
}
};main() 함수에서는 객체를 생성할 때 괄호 안에 초기값을 직접 전달합니다. 그 후 display() 함수를 호출하여 결과를 출력합니다.
A obj(3,8); obj.display();
위 코드에서 A obj(3, 8); 구문이 실행되면 매개변수 생성자가 호출되어 num1에는 3이, num2에는 8이 저장됩니다.
정리
생성자는 객체 지향 프로그래밍에서 객체의 상태를 안전하게 초기화하는 핵심 요소입니다. 기본 생성자는 별도의 값 없이 객체를 생성할 때 사용되며, 매개변수 생성자는 생성 시점에 원하는 값을 유연하게 전달할 수 있습니다. 실무에서는 필요에 따라 두 생성자를 함께 오버로딩하여 다양한 방식의 객체 초기화를 지원하는 것이 일반적입니다.