▶ 배열 복사
- 얕은 복사 : 배열의 주소값만을 복사
원본 배열과 복사본 배열 모두 하나의 주소값을 가르키고 있다.
즉, 얕은 복사를 한 복사본 배열과 원본 배열은 배열의 주소값은 하나로 공유해서 사용한다.
- 깊은 복사 : 동일한 새로운 배열을 하나 생성해서 실제 내부값들을 복사
■ 얕은 복사 방법
[표현법]
자료형[] 복사본배열 = 원본배열
■ 깊은 복사
1. for을 활용하는 방법(수작업)
새로운 배열을 생성하 인덱스 별 내부값을 일일이 대입하는 방법
예시)
int[] origin = {1, 2, 3, 4, 5};
int[] copy = new int[origin.length];
for (int i = 0; i < copy.length; i++) {
copy[i] = origin[i];
}
for (int i = 0; i < copy.length; i++) {
system.out.println(copy[i]);
}
결과 :
1
2
3
4
5
2. 새로운 배열을 생성한 후 System클래스에서 arraycopy메서드를 이용한 복사
[표현법]
System.arraycopy(원본 배열명, 원본 배열에서 복사를 시작할 인덱스,
복사본 배열명, 복사본 배열의 복사가 시작될 인덱스, 복사할 개수);
예시)
int[] origin = {1, 2, 3, 4, 5};
int[] copy = new int[10];
System.arraycopy(origin, 0, copy, 0, 5);
for(int i = 0; i < copy.length; i++) {
System.out.print(copy[i] + " ");
}
결과 : 1 2 3 4 5 0 0 0 0 0
3. Array 클래스에서 제공하는 copyOf 메서드를 이용한 복사(내부적으로 System.arraycopy를 사용함)
[표현법]
복사본 배열 = Arrays.copyOf(원본 배열명, 복사할 개수);
※ System.arraycopy 메서드와 Arrays.copyOf 메서드의 차이점
- System.arraycopy 메서드 : 몇번 인덱스부터 몇개를 어느 위치의 인덱스에 복사할껀지 다 직접 지정 가능하다.
- Arrays.copyOf 메서드 : 무조건 원본배열의 0번 인덱스부터 내가 지정한 개수만큼 복사가 진행된다.
내가 제시한 길이가 원본배열보다 크다면 나머지는 0으로 채워서 복사해준다.
예시)
int[] origin = {1, 3, 5, 7, 9};
int[] copy = Arrays.copyOf(origin, 7); // 복사할 개수 == copy 배열의 크기
System.out.println(Arrays.toString(copy));
결과 : [1, 3, 5, 7, 9, 0, 0]
4. clone 메서드를 사용하여 복사
[표현법]
복사본 배열 = 원본 배열.clone();
- clone 메서드는 인덱스 지정과 복사 개수 지정이 불가능하다. 즉, 원본배열과 똑같이 생성된다.
- clone() 함수는 Arrays클래스에서만 깊은 복사를 지원한다.
- 그 외의 클래스에서는 얕은복사(주소값 복사)를 지원한다.
예시)
int[] origin = {1, 2, 3, 4, 5};
int[] copy = origin.clone();
System.out.println(Arrays.toString(copy));
결과 : [1, 2, 3, 4, 5]
'JAVA' 카테고리의 다른 글
JAVA(13) 객체(Object) (0) | 2023.04.02 |
---|---|
JAVA(12) 2차원 배열 (0) | 2023.03.31 |
JAVA(11-1) 배열(Array) (0) | 2023.03.29 |
JAVA(10-2) 분기문(continue) (0) | 2023.03.29 |
JAVA(10-1) 분기문(break) (0) | 2023.03.29 |