03. Array(1)
배열
1. 배열
1) 정의
- 동일한 자료형 변수의 나열
2) 특징
- 한가지 자료형만 저장 가능
- 여러 값 저장 가능
- 한 번 크기를 지정하면 변경 불가능
3) 배열 선언 및 할당
1
2
3
4
<배열선언>
자료형[] 배열명; -> 현재 stack 메모리에 위치
int[] arr;
1
2
3
4
5
6
<배열 할당>
new 자료형[배열크기];
arr = new int[3];
-> heap 메모리에 방이 생성되고, 배열명에는 값이 아닌 첫번째 방의 주소값이
저장된다. 즉, 배열명 출력시 주소값이 출력되고, 배열명[인덱스] 출력시 값이 출력
1
2
3
<선언 및 할당>
int[] arr = new int[3];
4) 초기화
1
2
3
4
5
<인덱스를 이용한 초기화>
배열명[인덱스] = 값;
arr[0] = 1;
arr[1] = 2;
1
2
3
4
5
6
<for 문을 이용한 초기화>
for(int i = 0; i < arr.length; i++) {
arr[i] = i;
}
-> 초기화 할 값이 일정한 규칙이 있어야 가능
1
2
3
4
<선언과 동시에 초기화>
자료형 배열명 = new 자료형[]{} //new 자료형[] 생략 가능.
int[] arr = {1, 2, 3, 4, 5};
5) 메모리 1_ int[] arr 선언 -> stack 메모리에 생성
2_ new 연산자를 통하여 객체 생성하면 heap 메모리에 공간이 할당
3_ 초기화 전에는 각 index 공간에는 자료형의 기본값들이 저장
4_ stack 메모리의 arr의 안에는 값이 아닌 heap메모리에 있는 객체의 첫번째 방 주소값이 저장되어 있음
2. 복사
1) 얕은 복사
1
2
int[] arr1 = new int[3];
int[] arr2 = arr1;
2) 깊은 복사
1
2
int[] arr1 = new int[3]; // arr1이 초기화 했다고 가정
int[] arr2 = new int[3];
1
2
3
4
5
<for 문을 이용한 복사>
for(int i = 0; i < arr1.length; i++) {
arr2[i] = arr1[i];
}
1
2
3
4
<System을 이용한 복사>
System.arraycopy(원본, 복사시작점, 복사본, 입력시작점, 복사크기);
System.arraycopy(arr1, 0, arr2, 0, arr1.length);
1
2
3
4
<Arrays 클래스를 이용한 복사>
Arrays.copyOf(원본, 복사크기)
arr2 = Arrays.copyOf(arr1, arr1.length);