
자바 기본 문법 – 배열 – 2 – 배열의 복사와 비교
소제목: 배열의 복사
배열은 많은 데이터를 다룰 때 유용한 자료구조입니다. 배열의 복사는 기존 배열의 내용을 다른 배열에 복사하는 작업을 말합니다. 이를 통해 기존 배열의 내용을 보존하면서 새로운 배열을 생성할 수 있습니다. 배열을 복사하는 방법에는 얕은 복사와 깊은 복사라는 두 가지 방법이 있습니다.
얕은 복사
얕은 복사는 배열의 주소를 복사하는 방식입니다. 즉, 새로운 배열이 기존 배열과 같은 주소를 참조하게 됩니다. 이 경우, 한 배열의 요소를 수정하면 다른 배열의 요소도 함께 변경됩니다. 이는 배열이 참조 타입이기 때문에 발생하는 현상입니다. 예시를 통해 살펴보겠습니다.
int[] array1 = {1, 2, 3};
int[] array2 = array1; // 얕은 복사
array2[0] = 10;
System.out.println(array1[0]); // 출력 결과: 10
위의 예시에서 array2
는 array1
과 같은 주소를 가지므로, array2
의 첫 번째 요소를 변경하면 array1
의 첫 번째 요소도 함께 변경됩니다. 이는 마치 두 개의 학생이 같은 수업을 듣는 것과 유사합니다. 한 학생이 수업 내용을 수정하면 다른 학생도 같은 내용을 보게 됩니다.
깊은 복사
깊은 복사는 배열의 내용을 새로운 메모리 공간에 복사하는 방식입니다. 따라서 새로운 배열은 기존 배열과 다른 주소를 가지게 됩니다. 이 경우, 한 배열의 요소를 수정해도 다른 배열은 영향을 받지 않습니다. 예시를 통해 살펴보겠습니다.
int[] array1 = {1, 2, 3};
int[] array2 = new int[array1.length]; // 깊은 복사
for (int i = 0; i < array1.length; i++) {
array2[i] = array1[i];
}
array2[0] = 10;
System.out.println(array1[0]); // 출력 결과: 1
위의 예시에서 array2
는 array1
의 내용을 복사하여 새로운 배열을 생성하였습니다. 따라서 array2
의 첫 번째 요소를 변경해도 array1
의 첫 번째 요소는 변경되지 않습니다. 이는 마치 두 개의 학생이 동일한 내용을 가진 교재를 가지고 수업을 듣는 것과 유사합니다. 한 학생이 교재를 수정해도 다른 학생에게는 영향을 주지 않습니다.
소제목: 배열의 비교
배열의 비교는 두 개의 배열이 동일한 내용을 가지고 있는지 확인하는 작업입니다. 자바에서는 배열의 내용을 비교하기 위해 Arrays
클래스의 equals()
메서드를 사용할 수 있습니다.
예시: 배열의 비교
import java.util.Arrays;
int[] array1 = {1, 2, 3};
int[] array2 = {1, 2, 3};
int[] array3 = {1, 2, 4};
boolean isEqual1 = Arrays.equals(array1, array2);
boolean isEqual2 = Arrays.equals(array1, array3);
System.out.println(isEqual1); // 출력 결과: true
System.out.println(isEqual2); // 출력 결과: false
위의 예시에서 Arrays.equals()
메서드를 사용하여 array1
과 array2
를 비교하면 true
가 반환됩니다. 왜냐하면 두 배열은 동일한 내용을 가지고 있기 때문입니다. 반면, array1
과 array3
은 첫 번째 요소가 다르므로 false
가 반환됩니다.
비교를 할 때는 배열의 길이도 함께 확인해야 합니다. 배열의 길이가 다르다면 내용이 같더라도 두 배열은 다른 것으로 간주됩니다. 이는 마치 두 개의 목록을 비교할 때, 항목의 내용뿐만 아니라 항목의 개수도 고려하는 것과 비슷합니다.
주의해야 할 점
- 배열의 복사와 비교 시, 배열의 요소가 참조 타입인 경우 주의해야 합니다. 얕은 복사를 사용하면 복사한 배열과 원본 배열이 같은 객체를 참조하게 됩니다. 따라서 한 배열의 요소를 변경하면 다른 배열도 함께 변경될 수 있습니다. 깊은 복사를 사용하여 객체를 복사하거나, 복사한 배열의 요소를 개별적으로 수정해야 합니다.
- 배열의 비교 시, 배열의 길이도 함께 확인해야 합니다. 배열의 길이가 다르다면 내용이 같더라도 두 배열은 다른 것으로 간주됩니다.
- 배열의 복사와 비교에는 라이브러리인
java.util.Arrays
의 메서드를 활용할 수 있습니다. 이를 통해 간편하게 배열의 복사와 비교를 수행할 수 있습니다.
이상으로 배열의 복사와 비교에 대한 내용을 알아보았습니다. 자바에서 배열을 다루는 것은 프로그래밍에서 중요한 부분이므로, 이해를 잘 하고 활용할 수 있도록 노력해보세요!