자바에서 인스턴스의 복사를 생성자를 이용하여 수행하는 것은 주로 "복사 생성자 (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
'JAVA > 포스팅' 카테고리의 다른 글
자바 명시적 초기화 (Explicit Initialization) (0) | 2023.11.09 |
---|---|
자바 변수의 초기화 (0) | 2023.11.09 |
자바 super() 키워드를 사용하여 부모 클래스의 생성자 호출 (0) | 2023.11.09 |
자바 this 키워드를 사용하여 다른 생성자 호출 (0) | 2023.11.09 |
자바 this() 키워드를 사용하여 다른 생성자 호출 (0) | 2023.11.08 |