Notice
Recent Posts
Recent Comments
Link
SeouliteLab
[Java/자바] 배열의 깊은 복사 (Deep copy) 예제 본문
Java에서 배열을 복사할 때 얕은 복사(shallow copy)가 아니라 깊은 복사(deep copy)를 수행해야 하는 경우가 있습니다. 깊은 복사를 통해 원본 배열의 요소와 복사된 배열의 요소가 서로 독립적인 객체가 되도록 할 수 있습니다. 이를 위해 다양한 방법으로 배열의 깊은 복사를 수행할 수 있습니다.
예제 1: for 루프를 사용한 깊은 복사
public class DeepCopyExample {
public static void main(String[] args) {
int[] originalArray = {1, 2, 3, 4, 5};
int[] copiedArray = new int[originalArray.length];
for (int i = 0; i < originalArray.length; i++) {
copiedArray[i] = originalArray[i];
}
System.out.println("Original Array: " + Arrays.toString(originalArray));
System.out.println("Copied Array: " + Arrays.toString(copiedArray));
}
}
이 예제는 for 루프를 사용하여 원본 배열의 각 요소를 새로운 배열에 복사하는 방법을 보여줍니다.
예제 2: System.arraycopy()를 사용한 깊은 복사
public class DeepCopyExample2 {
public static void main(String[] args) {
int[] originalArray = {1, 2, 3, 4, 5};
int[] copiedArray = new int[originalArray.length];
System.arraycopy(originalArray, 0, copiedArray, 0, originalArray.length);
System.out.println("Original Array: " + Arrays.toString(originalArray));
System.out.println("Copied Array: " + Arrays.toString(copiedArray));
}
}
System.arraycopy() 메서드를 사용하여 원본 배열의 요소를 새로운 배열에 복사하는 방법을 보여줍니다.
예제 3: Arrays.copyOf()를 사용한 깊은 복사
import java.util.Arrays;
public class DeepCopyExample3 {
public static void main(String[] args) {
int[] originalArray = {1, 2, 3, 4, 5};
int[] copiedArray = Arrays.copyOf(originalArray, originalArray.length);
System.out.println("Original Array: " + Arrays.toString(originalArray));
System.out.println("Copied Array: " + Arrays.toString(copiedArray));
}
}
Arrays.copyOf() 메서드를 사용하여 원본 배열의 요소를 새로운 배열에 복사하는 방법을 보여줍니다.
예제 4: Object.clone()을 사용한 깊은 복사
public class DeepCopyExample4 implements Cloneable {
private int[] array;
public DeepCopyExample4(int[] array) {
this.array = array;
}
public int[] getArray() {
return array;
}
public DeepCopyExample4 clone() throws CloneNotSupportedException {
DeepCopyExample4 cloned = (DeepCopyExample4) super.clone();
cloned.array = this.array.clone();
return cloned;
}
public static void main(String[] args) throws CloneNotSupportedException {
int[] originalArray = {1, 2, 3, 4, 5};
DeepCopyExample4 original = new DeepCopyExample4(originalArray);
DeepCopyExample4 copied = original.clone();
System.out.println("Original Array: " + Arrays.toString(original.getArray()));
System.out.println("Copied Array: " + Arrays.toString(copied.getArray()));
}
}
Object.clone() 메서드를 사용하여 깊은 복사를 수행하는 방법을 보여줍니다.
예제 5: Serialization을 사용한 깊은 복사
import java.io.*;
public class DeepCopyExample5 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
int[] originalArray = {1, 2, 3, 4, 5};
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(originalArray);
oos.close();
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
int[] copiedArray = (int[]) ois.readObject();
ois.close();
System.out.println("Original Array: " + Arrays.toString(originalArray));
System.out.println("Copied Array: " + Arrays.toString(copiedArray));
}
}
Serialization을 사용하여 깊은 복사를 수행하는 방법을 보여줍니다.
예제 6: Apache Commons Lang 라이브러리를 사용한 깊은 복사
import org.apache.commons.lang3.SerializationUtils;
public class DeepCopyExample6 {
public static void main
(String[] args) {
int[] originalArray = {1, 2, 3, 4, 5};
int[] copiedArray = SerializationUtils.clone(originalArray);
System.out.println("Original Array: " + Arrays.toString(originalArray));
System.out.println("Copied Array: " + Arrays.toString(copiedArray));
}
}
Apache Commons Lang 라이브러리의 SerializationUtils 클래스를 사용하여 깊은 복사를 수행하는 방법을 보여줍니다.
'프로그래밍' 카테고리의 다른 글
[Java/자바] 쉘 스크립트 실행 (0) | 2024.03.10 |
---|---|
[Java/자바] 임시 폴더(Temp directory) 경로 가져오기 (0) | 2024.03.10 |
[Java/자바] 강제적으로 OutOfMemoryError 발생시키기 (0) | 2024.03.10 |
[Java/자바] Java 10 - var 키워드로 변수 선언 (지역 변수 타입 추론하기) (0) | 2024.03.10 |
[Java/자바] 파일 소유자 이름 확인 (0) | 2024.03.10 |