JAVA/포스팅

자바 생성자를 이용한 인스턴스의 복사

짜집퍼박사(짜박) 2023. 11. 9. 01:23

자바에서 인스턴스의 복사를 생성자를 이용하여 수행하는 것은 주로 "복사 생성자 (Copy Constructor)"라고 불립니다. 복사 생성자는 기존 인스턴스의 상태를 기반으로 새로운 인스턴스를 생성하는 데 사용됩니다. 이를 통해 원본 인스턴스의 데이터를 복사하여 독립적인 복사본을 만들 수 있습니다.

복사 생성자를 만들기 위해서는 기존 클래스의 생성자와 유사한 형태로 복사 생성자를 정의해야 합니다. 일반적으로 다음 두 가지 방법으로 복사 생성자를 만들 수 있습니다:

1. 매개변수로 다른 인스턴스를 받는 생성자 : 다른 인스턴스를 매개변수로 받아서 해당 인스턴스의 상태를 복사하여 새로운 인스턴스를 생성합니다.

2. 클론(복제) 메서드를 사용하여 복사 : 객체의 clone() 메서드를 사용하여 객체를 복제하고, 이렇게 복제된 객체를 반환합니다.

다음은 각각의 방법을 사용한 예제 코드입니다.

방법 1 : 매개변수로 다른 인스턴스를 받는 생성자를 사용한 복사 생성자

public class MyClass {
    private int value;

    // 복사 생성자
    public MyClass(MyClass other) {
        this.value = other.value;
    }

    public int getValue() {
        return value;
    }

    public static void main(String[] args) {
        MyClass original = new MyClass();
        original.value = 42;

        MyClass copy = new MyClass(original); // 복사 생성자를 사용하여 복사
        System.out.println("Original Value: " + original.getValue()); // 42
        System.out.println("Copy Value: " + copy.getValue()); // 42
    }
}

방법 2: clone() 메서드를 사용한 복사

public class MyClass implements Cloneable {
    private int value;

    // 객체를 복제하는 메서드
    @Override
    public MyClass clone() {
        try {
            return (MyClass) super.clone();
        } catch (CloneNotSupportedException e) {
            return null;
        }
    }

    public int getValue() {
        return value;
    }

    public static void main(String[] args) {
        MyClass original = new MyClass();
        original.value = 42;

        MyClass copy = original.clone(); // clone() 메서드를 사용하여 복사
        System.out.println("Original Value: " + original.getValue()); // 42
        System.out.println("Copy Value: " + copy.getValue()); // 42
    }
}

복사 생성자를 사용하면 객체의 깊은 복사(deep copy) 또는 얕은 복사(shallow copy)를 수행할 수 있습니다. 객체 내에 참조 타입 멤버 변수가 있는 경우, 얕은 복사는 참조만 복사하고 동일한 객체를 가리키게 되므로 주의가 필요합니다. 깊은 복사는 참조된 객체의 복사본까지 생성하여 완전히 독립적인 복사본을 만듭니다.

 

With ChatGPT