복사 (.clone())
- 얕은 복사
- 배열은 참조형 변수이며 실제값이 아닌 실제값의 주소값을 가진다.
- 따라서 배열 변수간에 대입 연산자 = 를 사용해서 복사를 하게 되면 주소값만 복사된다.
- 이렇게 주소값만 복사되고 실제값은 1개로 유지되는걸 얕은 복사 라고 한다!
- 주소값만 복사된다?
- 주소값만 복사된다는건 변수명은 서로 다르지만 같은 값을 보고 있다는것을 뜻해요.
- 비유하자면 내가 가진 핸드폰, PC 로 각각 카카오톡에 로그인해도 나의 카톡 계정은 1개인것처럼, 변수명은 여러개지만 결국 실제값은 1개인것과 같다고 보시면 됩니다.
예제
public class Arr03 {
public static void main(String[] args) {
//얕은 복사
int[] a = { 1, 2, 3, 4 };
int[] b = a; //얕은 복사
b[0] = 3; // b 배열의 0번쨰 순번값을 3으로 수정했습니다 (1->3)
System.out.println(a[0]);
}
}
- 깊은 복사
- 얕은 복사처럼 가짜 복사가 아니라 진짜 새로운 배열을 똑같이 만들고 싶을때 깊은 복사를 합니다.
- 깊은 복사는 결국 실제 값을 가지고 있는 배열의 기본형 값을 꺼내서 복사해주면 됩니다.
- 반복문 for 문 을 통해서 하나씩 꺼내서 복사해주는 방법과 여러 메서드를 사용하는 방법이 있습니다.
예제
{
// 깊은 복사 메서드
public static void main(String[] args) {
// 2. Arrays.copyOf() 메서드
int[] a = { 1, 2, 3, 4 };
int[] b = Arrays.copyOf(a, a.length); // 배열과 함께 length값도 같이 넣어줍니다.
a[3] = 0;
System.out.println(a[3]);
System.out.println(b[3]);
}
}