① 얕은 복사

얕은 복사(Shallow Copy) : 하나의 주소 값을 가지고 있으므로 하나라고 볼 수 있습니다 ( 그러므로 원본배열이 변경될 때 서로 간의 값이 같이 변경됩니다. )
복사한다는 의미보다는 같이 사용한다라는 의미가 됩니다.
그렇기에 대개 객체를 복사한다는 말은 얕은 복사가 아닌 깊은 복사를 의미합니다.
public class Array_Copy{ public static void main(String[] args) { int[] a = { 1, 2, 3, 4 }; int[] b = new int[a.length]; for (int i = 0; i < a.length; i++) { b[i] = a[i]; } } }
② 깊은 복사

깊은 복사(Deep Copy) : 제대로 배열을 복사하는 의미를 가지려면 배열의 깊은 복사를 하여야 합니다.
그래야 복사된 배열이나 원본배열이 변경될 때 서로 간의 값은 바뀌지 않습니다.
Object.clone()
public class Array_Copy{ public static void main(String[] args) { int[] a = { 1, 2, 3, 4 }; int[] b = a.clone(); } }
Array.clone()을 사용하면 배열을 쉽게 복사할 수 있습니다. (깊은 복사) 가장 보편적인 방법입니다.
Arrays.copyOf()
import java.util.Arrays; public class Array_Copy{ public static void main(String[] args) { int[] a = { 1, 2, 3, 4 }; int[] b = Arrays.copyOf(a, a.length); } }
Arrays클래스는 배열을 조작할 수 있는 메소드를 가진 클래스입니다. 이 클래스 안에 있는 Arrays.copyOf()를 사용하면 배열의 시작점 ~ 원하는 length까지 배열의 깊은 복사를 할 수 있습니다.
Arrays.copyOfRange()
import java.util.Arrays; public class Array_Copy{ public static void main(String[] args) { int[] a = { 1, 2, 3, 4 }; int[] b = Arrays.copyOfRange(a, 1, 3); } }
Arrays.copyOf()는 배열의 처음~지정한 length까지 복사하는 메서드였다면 Arrays.copyOfRange() 메서드는 복사할 배열의 시작점도 지정할 수 있습니다.
System.arraycopy()
public class Array_Copy{ public static void main(String[] args) { int[] a = { 1, 2, 3, 4 }; int[] b = new int[a.length]; System.arraycopy(a, 0, b, 0, a.length); } }
System.arraycopy() 메서드는 지정된 배열을 대상 배열의 지정된 위치에 복사합니다.
'Language > Java' 카테고리의 다른 글
package와 import (0) | 2022.01.02 |
---|---|
클래스, 객체, 인스턴스 개념 (0) | 2022.01.02 |
2차 배열 (0) | 2021.12.24 |
반복문 (for, while문) (0) | 2021.11.29 |
연산자 (0) | 2021.11.28 |