본문 바로가기
  • Let's study
알고리즘/Java

[Java] 배열의 복사

by 코딩고수이고파 2026. 7. 13.

하나의 값만 저장 가능한 원시 타입은 실제 값이 스택에 저장되고 배열 같이 여러 개의 값을 가진 자료형은 참조값 형태로 저장한다. (실체는 힙에 존재)

얕은 복사

참조 타입은 복사할 때 실제 값이 아닌 참조값이 복사되기에 주의해야 한다. 이를 얕은 복사라고 부른다.

배열은 변수처럼 그냥 복사하면 두 배열은 같은 참조값을 참조하게 되고, 한 배열에서 수정하면 다른 배열도 수정된 참조값을 참조한다.

int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = arr1; // 배열 얕은 복사

for(int i = 0; i < arr2.length; i++) {
    System.out.println(arr2[i]);	//1 2 3 4 5
}

arr2[0] = 100;

for(int i = 0; i < arr2.length; i++) {
    System.out.println(arr2[i]);	// 100 2 3 4 5
}

for(int i = 0; i < arr1.length; i++) {
    System.out.println(arr1[i]);	// 100 2 3 4 5
}

깊은 복사

원시 타입의 복사는 값 자체가 복사되기 때문에 동일한 값이 2개가 되어 이를 깊은 복사라고 한다.

배열의 실제 값을 복사 하려면 새로운 배열을 만들어 깊은 복사를 해야 한다.

int[] arr = new int[3];

arr[0] = 10;
arr[1] = 20;
arr[2] = 30;

// 배열 깊은 복사
int[] arr2 = new int[3];
for(int i = 0; i < arr.length; i++) {
    arr2[i] = arr[i];
}

for(int i = 0; i < arr.length; i++) {
   System.out.println(arr2[i]);  // 10 20 30
}

arr2[0] = 100;

for(int i = 0; i < arr2.length; i++) {
    System.out.println(arr2[i]);  // 100 20 30
}

for(int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);  // 10 20 30
}

'알고리즘 > Java' 카테고리의 다른 글

[Java] 함수  (0) 2026.07.13
[Java] 클래스  (0) 2026.07.13
[Java] 반복문 for, while  (0) 2026.07.10
[Java] 배열  (0) 2026.07.10
[Java] 비교연산, 산술연산, 증감연산, 복합대입연산, 논리연산  (0) 2026.07.10

댓글