2021-01-02
자바에서의 배열을 복사하는 방법은 여러 가지 있다. for이나 while 같은 반복문을 활용하여 직접 값을 하나씩 넣어주는 방법도 있고 이번 소개할 방법처럼 Arrays의 메서드를 활용하는 방법이 있다. 사용방법은 매우 간단하니 바로 코드를 살펴보자.
package aArrays;
import java.util.Arrays;
public class copyMain {
public static void main(String[] args) {
int [] arr1 = {1, 2, 3, 4, 5};
int [] arr2 = Arrays.copyOf(arr1, arr1.length);
//복사하고자하는 오리지널 배열 넣고, 복사하고자하는 총범위를 뒤에 넣어줌
for(int i =0; i < arr2.length; i++) {
System.out.print(arr2[i] + " ");
}
}
}
복사할 배열은 arr1이며, 1~5 의 정수 값을 넣어 주었다. 복사한 데이터를 받을 배열은 arr2로써 초기 배열의 크기를 지정할 필요 없이 바로 Arrays.copyOf를 이용해서 arr1 배열의 데이터를 손쉽게 복사할 수 있다.
매개변수로는 [ Arrays.copyOf( 복사할 배열, 복사할 배열의 크기); ]처럼 넣어주면 된다. 이후 출력해 보면 arr1과 똑같은 데이터가 정상적으로 들어간 것을 확인할 수 있다.
이뿐만 아니라 자신이 복사하고자 하는 배열의 범위만 지정해서 복사를 할 수 도 있다. 이와 같은 경우에는 Arrays.copyOfRange라는 메서드를 사용하면 되는데, 이역시 간단하니 바로 코드를 살펴보자.
package aArrays;
import java.util.Arrays;
public class copyMain {
public static void main(String[] args) {
int [] arr1 = {1, 2, 3, 4, 5};
System.out.println();
int [] arr3 = Arrays.copyOfRange(arr1, 0, 3);
//특정범위를 지정해서 해당부분만 복사할 수 있다.
for(int i =0; i < arr3.length; i++) {
System.out.print(arr3[i] + " ");
}
}
}
이번에는 arr1에서 1, 2, 3 만 복사하고자 하여, Arrays.copyOfRange 를 통한 복사를 진행하였다. 원리는 기존에 Arrays.copyOf 와 크게 다르지 않다.
매개변수로는 [ Arrays.copyOfRange(복사하고자하는 배열, 시작 위치, 배열크기); ]로 선언해주면 되며, 주의할 점은 복사되는 배열은 시작 위치부터 배열크기 바로 전까지 복사된다는 점이다. 위의 코드처럼 배열을 복사해주면 실제 복사되는 배열 arr3 에는 정수 1, 2, 3 이 복사된다. 즉 arr1의 0 ~ 2 인덱스의 값이 저장된다. 출력하게 되면 아래와 같이 1, 2, 3 정수가 정상적으로 복사된 것을 확인할 수 있다.
Arrays.copyOfRange에서 흥미로운 점이 있는데, 만약에 복사받는 배열(arr3)이 복사하는 배열(arr1)보다 범위를 크게 지정해 주면 해당 초과하는 범위는 배열타입의 default 값이 들어가게 된다. 코드를 살펴보자.
package aArrays;
import java.util.Arrays;
public class copyMain {
public static void main(String[] args) {
int [] arr1 = {1, 2, 3, 4, 5};
int [] arr3 = Arrays.copyOfRange(arr1, 0, 6);
//특정범위를 지정해서 해당부분만 복사할 수 있다.
for(int i =0; i < arr3.length; i++) {
System.out.print(arr3[i] + " ");
}
}
}
(arr1 배열 크기 5 / 새롭게 선언된 arr3 배열 크기 6)
arr3에 배열을 arr1 보다 하나 크게 범위를 지정해 복사를 진행해 주었다. 이후 해당 값을 출력해 보면 아래와 같이 arr1에 초과된 범위의 값은 0으로 채워진 것을 확인할 수 있다.