본문 바로가기

JAVA/배열 및 2차원배열

배열의 복사

1. 얕은 복사

배열의 주소값만 가져와 참조형 변수(배열명)에 저장하고 하나의 배열 객채를 두 변수가 참조 하는 것.

 

int[] arr = new int[4];

for(int i = 0; i<arr.length; i++){

  arr[i] =i;

}

int[] arr2 = arr;

 

System.out.println("arr의 주소 : "+ arr);

System.out.println("arr2의 주소 : " + arr2);

System.out.println("arr의 값 : " + Arrays.toString(arr));

System.out.println("arr2의 값 : " +Arrays.toString(arr2));  

 

얕은 복사의 경우 같은 배열객체를 공유하기 때문에, 한쪽의 값이 변경하면 다른 쪽의 값도 똑같이 변경되서 나온다.

arr[2] = 1;

System.out.println("arr의 값 : " + Arrays.toString(arr));

System.out.println("arr2의 값 : " +Arrays.toString(arr2));  

arr2[3] = 2;

System.out.println("arr의 값 : " + Arrays.toString(arr));

System.out.println("arr2의 값 : " +Arrays.toString(arr2));  

 

2.깊은 복사

새로운 배열 객체를 생성하고, 기존 배열 객체의 데이터를 복사해 사용하는 것

이 경우 각각 다른 배열 객체이기 때문에 한쪽이 변경되도 영향을 주지 않는다.

다만 복사길이가 복사 받는 배열의 크기를 넘어갈 경우에러가 발생한다.

 

복사 하는 이유: 배열의 크기는 한번 선언하면 변경이 안되기 때문에 새로운 배열을 새로운 크기로할당을 하여 복사를 하거나, 값을 저장해 놓은 후, 재 할당을 해줘야 한다.

 

1) 복사 방법

 

int arr[] = new int[4];

int arr2[] = new int[arr.length];

arr[0] =  2;

arr[1] =  3;

arr[2] =  4;

arr[3] =  5;

 

.1 for문을 이용한 복사 방법

for (int i = 0; i < arr2.length; i++){

   arr2[i] = arr[i];

}

한쪽이 변경되도 영향을 받지 않는다.

.2 메소드를 이용한 복사방법

 ㄱ)System.arraycopy(원본배열,원본의 복사 시작 인덱스, 복사용 배열 ,복사받을 시작 인덱스 , 복사할 길이 );

 

 

 단 이 경우

  복사의 총 길이가 복사용 배열 크기보다 크거나,

  원본 시작 인덱스+ 복사할 길이가 원본 크기보다 크면

에러가 발생한다.

 

 ㄴ)복사 배열 = 원본배열.clone(); 

이 경우 복사 배열은 원본과 동일한 크기, 동일한 값의 다른 배열 객체다.

 

'JAVA > 배열 및 2차원배열' 카테고리의 다른 글

2차원 배열  (0) 2019.12.14
배열  (0) 2019.12.14