Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 복사 생성자(Copy Constructor)란 무엇이고, 어떻게 사용할까?

복사 생성자(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이 가진 namerank 값이 s2에 그대로 복사됩니다.

Student s2 = new Student(s1);

실행 결과로 s2s1과 동일한 데이터를 가지게 되며, 콘솔에는 다음과 같이 출력됩니다.

 Student Jack got Rank 2

이처럼 기존 객체의 값을 복사해 새 객체를 초기화하는 생성자를 복사 생성자라고 부릅니다. 참고로 C++와 달리 C#은 컴파일러가 자동으로 복사 생성자를 제공하지 않기 때문에, 필요하다면 위 예제처럼 직접 정의해서 사용해야 합니다.