[즐거운자바] 객체지향(7) - 참조형 배열
<참조형 배열>
배열의 타입이 기본형이 아닌 경우.
배열변수가 참조하는 배열의 공간이 값을 저장하는 것이 아니라, 값을 참조한다는 것을 의미.
<사용 목적>
1. 그룹화: 비슷한 종류의 객체를 논리적으로 그룹화할 수 있다. 예를 들어, 모든 동물 객체를 한 배열에 저장할 수 있다.
2. 다형성과 유연성: 참조형 배열은 다형성을 지원한다. 이는 서로 다른 클래스의 객체를 동일한 배열에 저장할 수 있음을 의미한다. 이는 객체의 동작을 다양하게 조정하거나 객체의 유형을 동적으로 변경할 수 있는 유연성을 제공합니다.
3. 동적 데이터 구조: 배열은 크기가 정해져 있어 변경하기 어렵지만, 참조형 배열은 동적으로 크기를 조정할 수 있다.
4. 컬렉션 구현: 자체적으로 컬렉션을 구현하고자 할 때, 배열은 가장 기본적이고 간단한 방법이다.
5. 메모리 관리: 객체의 참조를 관리하면서 메모리를 효율적으로 사용할 수 있다.
<Arrays>
배열 관련 유틸리티
배열을 수만큼 복사: .copyOf(배열, 수);
public class Array14 {
public static void main(String[] args) {
int[] copyFrom = {1,2,3};
int[] copyTo = java.util.Arrays.copyOf(copyFrom, copyFrom.length);
for (int c : copyTo) {
System.out.println(c);
}
int[] copyTo2 = java.util.Arrays.copyOf(copyFrom, 5);
for (int c : copyTo2) {
System.out.println(c);
}
}
}
<얕은 복사(Shallow Copy) vs 깊은 복사(Deep Copy)>
객체 복사에 대한 서로 다른 방법.
1. 얕은 복사(Shallow Copy)
: 객체의 필드들은 복사하지만, 객체가 참조하는 다른 객체들은 복사하지 않는 방법.
즉, 복사된 객체와 원본 객체는 동일한 객체를 참조한다. 이로 인해 원본 객체나 복사본 중 하나를 수정하면 다른 객체도 영향을 받는다.
2. 깊은 복사(Deep Copy)
: 객체의 필드들을 복사하고, 객체가 참조하는 다른 객체들까지 재귀적으로 복사하는 방법.
이로 인해 원본 객체와 복사본은 완전히 독립된 객체가 되며, 한 객체의 변경이 다른 객체에 영향을 미치지 않는다.
<배열 메서드 실습>
배열을 범위만큼 복사: .copyOf(배열, 시작수, 끝수);
import java.util.Arrays;
public class Array15 {
public static void main(String[] args) {
char[] copyFrom = {'h','e', 'l', 'l', 'o', '!'};
char[] copyTo = Arrays.copyOfRange(copyFrom, 1, 3);
for (char c : copyTo) {
System.out.println(c);
}
}
}
배열 비교: .compare(배열1, 배열2);
import java.util.Arrays;
public class Array16 {
public static void main(String[] args) {
int[] array1 = {1,2,3,4,5};
int[] array2 = {1,2,3,4,5};
int compare = Arrays.compare(array1, array2);
System.out.println(compare);
}
}
배열 정렬: .sort(배열);
import java.util.Arrays;
public class Array17 {
public static void main(String[] args) {
int[] array = {5,4,3,2,1};
Arrays.sort(array);
for (int i : array) {
System.out.println(i); // 1,2,3,4,5 순으로 출력
}
}
}
배열 안에 인덱스 찾기: .binarySearch(배열, 수);
import java.util.Arrays;
public class Array18 {
public static void main(String[] args) {
int[] array = {5,4,3,1,2};
Arrays.sort(array);
int i = Array.binarySearch(array, 4);
System.out.println(i); // 3, 3번째 인덱스에 4가 있다.
}
}