복사 생성자(Copy Constructor)는 다른 객체의 변수 값을 그대로 복사하여 새로운 객체를 생성하는 생성자입니다. C#에서는 매개변수로 같은 클래스 타입의 객체를 받는 생성자를 정의하면 복사 생성자 역할을 하도록 만들 수 있습니다.
개념만 보면 어렵게 느껴질 수 있으니, 실제 코드 예제를 통해 살펴보겠습니다.
C# 복사 생성자 예제
using System;
namespace Demo {
class Student {
private string name;
private int rank;
// 복사 생성자
public Student(Student s) {
name = s.name;
rank = s.rank;
}
// 일반 생성자
public Student(string name, int rank) {
this.name = name;
this.rank = rank;
}
public string Display {
get {
return " Student " + name + " got Rank " + rank.ToString();
}
}
}
class StudentInfo {
static void Main() {
Student s1 = new Student("Jack", 2);
// 복사 생성자 호출
Student s2 = new Student(s1);
// 결과 출력
Console.WriteLine(s2.Display);
Console.ReadLine();
}
}
}
코드 동작 순서 살펴보기
위 예제의 실행 흐름을 단계별로 정리하면 다음과 같습니다.
1. 복사 생성자 선언
먼저 같은 클래스 타입(Student)의 객체를 매개변수로 받는 생성자를 선언합니다. 이것이 바로 복사 생성자입니다.
public Student(Student s)
2. 새 객체 생성
일반 생성자를 통해 Student 클래스의 첫 번째 객체 s1을 생성합니다.
Student s1 = new Student("Jack", 2);
3. 객체 복사
이제 s1 객체를 매개변수로 전달하여 새로운 객체 s2를 생성합니다. 이때 s1이 가진 name과 rank 값이 s2에 그대로 복사됩니다.
Student s2 = new Student(s1);
실행 결과로 s2는 s1과 동일한 데이터를 가지게 되며, 콘솔에는 다음과 같이 출력됩니다.
Student Jack got Rank 2
이처럼 기존 객체의 값을 복사해 새 객체를 초기화하는 생성자를 복사 생성자라고 부릅니다. 참고로 C++와 달리 C#은 컴파일러가 자동으로 복사 생성자를 제공하지 않기 때문에, 필요하다면 위 예제처럼 직접 정의해서 사용해야 합니다.