본문 바로가기
JAVA

얕은 복사, 깊은 복사

by suyeoneee 2024. 11. 12.

얕은 복사

 

배열은 참조형 변수이며 실제값이 아닌 실제값의 주소값을 가진다.

배열 변수간에 대입 연산자 '='를 사용해서 복사를 하게 되면 (배열 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

댓글