얕은 복사
배열은 참조형 변수이며 실제값이 아닌 실제값의 주소값을 가진다.
배열 변수간에 대입 연산자 '='를 사용해서 복사를 하게 되면 (배열 a = 배열 b) 주소값만 복사된다.
여기서 만약 배열 b의 원소 값을 바꾸면 배열 a의 원소 값도 바뀌게 된다.
int[] a = {1, 2, 3, 4};
int[] b = a; // 얕은 복사
b[0] = 3; // b 배열의 0번째 순번값을 3으로 수정
System.out.println(a[0]); // 3이 출력된다.
깊은 복사
주소값을 복사하는 것이 아닌, 진짜 새로운 배열을 똑같이 만들고 싶을 때 깊은 복사를 하면 된다.
실제 값을 가지고 있는 배열의 기본형 값을 꺼내서 복사하면 깊은 복사를 할 수 있다.
int[] a = {1, 2, 3, 4};
int[] b = new int[a.length];
for (int i=0; i<a.length; i++) {
b[i] = a[i]; //깊은 복사
}
b[0] = 3;
System.out.println(a[0]); // 그대로 1이 출력된다.
깊은 복사 메소드
1. .clone()
-> 2차원 이상의 배열에서는 얕은 복사로 동작됨
int[] a = {1, 2, 3, 4};
int[] b = a.clone();
2. Arrays.copyOf(배열명, 배열길이)
< import java.util.Arrays; > import 하여 사용
int[] a = {1, 2, 3, 4};
int[] b = Arrays.copyOf(a, a.length);
'JAVA' 카테고리의 다른 글
동등성과 동일성 (0) | 2024.11.22 |
---|---|
오버로딩 (2) | 2024.11.14 |
객체, 클래스, 인스턴스 (0) | 2024.11.14 |
JDK 구성 요소 (1) | 2024.11.12 |
댓글