JAVA
배열의 복사 : clone() 메서드 자바
Meluu_
2024. 9. 3. 09:31

✔️ 1차원 배열 깊은 복사
얕은 복사는 그냥 대입하면 되므로 깊은 복사를 중점으로 정리
1차원 배열 깊은 복사는 배열의 메서드인 clone() 을 사용하면 된다.
int[] arr = {1,2};
int[] arr2 = arr.clone();
Test
public class Main {
public static void main(String[] args) throws IOException {
int[] arr = {1, 2};
int[] arr2 = arr.clone();
arr[0] = 55555;
for (int i : arr) {
System.out.print(i + " ");
}
System.out.println();
for (int i : arr2) {
System.out.print(i + " ");
}
}
}

✔️ 2차원 배열 깊은 복사
2차원 배열 복사가 문제인데
이때는 그냥 무작정 arr2 = arr.clone()을 하면 안된다.
잘 생각해보자 2차원 배열은 각 1차원 배열에 대한 주소를 갖는다. 따라서 clone을 할 시 주소값이 넘어가기에
완전한 복사가 되지 않는다.
따라서 각 2차원 배열에 있는 1차원 배열 각각에 대하여 복사를 해야한다.
int[][] arr2 = new int[n][n];
for (int i = 0; i < arr.length; i++) {
arr2[i] = arr[i].clone();
}
2차원 배열을 무작정 복사
public class Main {
public static void main(String[] args) throws IOException {
int[][] arr = {{1,2}, {3,4}};
int[][] arr2 = arr.clone();
arr[0][0] = 555;
for (int[] ints : arr) {
for (int anInt : ints) {
System.out.print(anInt + " ");
}
System.out.println();
}
System.out.println();
for (int[] ints : arr2) {
for (int anInt : ints) {
System.out.print(anInt + " ");
}
System.out.println();
}
}
}
결과
// arr
555 2
3 4
// arr 2
555 2
3 4
정상적인 2차원 배열 복사
public class Main {
public static void main(String[] args) throws IOException {
int[][] arr = {{1,2}, {3,4}};
int[][] arr2 = new int[2][2];
// 깊은 복사
for (int i = 0; i < arr.length; i++) {
arr2[i] = arr[i].clone();
}
arr[0][0] = 555;
for (int[] ints : arr) {
for (int anInt : ints) {
System.out.print(anInt + " ");
}
System.out.println();
}
System.out.println();
for (int[] ints : arr2) {
for (int anInt : ints) {
System.out.print(anInt + " ");
}
System.out.println();
}
}
}
결과
// arr
555 2
3 4
// arr2
1 2
3 4
🔖 학습 참조