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

얕은 복사
참조 타입은 복사할 때 실제 값이 아닌 참조값이 복사되기에 주의해야 한다. 이를 얕은 복사라고 부른다.
배열은 변수처럼 그냥 복사하면 두 배열은 같은 참조값을 참조하게 되고, 한 배열에서 수정하면 다른 배열도 수정된 참조값을 참조한다.

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 |
댓글