자바의정석 Chapter5. 배열
배열이란
같은 타입의 여러 변수를 하나의 묶음으로 다루는 것입니다.
배열의 선언과 생성
배열을 생성하기 위해서는 new 와 함께 배열의 타입과 길이를 지정해 주어야 합니다.
타입[] 변수이름; // 배열 선언
변수이름 = new 타입[길이]; // 배열 생성
배열의 길이와 인덱스
- 배열의 길이는 값을 저장할 수 있는 공간의 개수 입니다.
- 배열의 길이는 int 범위의 양의 정수(0도 포함) 이어야 합니다.
- 한번 정의된 배열의 길이는 변경 할 수 없습니다. 만약 변경을 하고자 할 경우 아래와 같은 방법이 있습니다.
- 더 큰 배열을 새로 생성한다.
- 기존 배열의 내용을 새로운 배열에 복사합니다.
- 생성된 배열의 각 저장공간을 배열의 요소라고 하며 배열이름[인덱스] 형식으로 배열의 요소에 접근 합니다.
- 배열의 인덱스는 배열의 요소마다 붙여진 일련번호로 범위는 0부터 배열길이 -1 까지 입니다.
배열의 초기화
선언과 동시에 생성하는 것을 초기화라고 합니다.
[첫 번째 방법]
타입[] 변수이름 = new 타입[길이] // 배열 선언과 생성을 동시에
변수이름[0] = 1; // 각 인덱스에 직접 값 저장
변수이름[1] = 2;
...
[두 번째 방법]
타입[] 변수이름 = new int[] {1,2,...};
타입[] 변수이름 = {1,2,3,...}; // 위에서 new int[] 부분은 생략할 수 있습니다.
배열의 복사
배열은 한번 생성하면 그 길이를 변경 할 수 없기 때문에 더 큰 공간이 필요할 경우 새로운 배열을 생성 해야 하며 2가지 방법이 있습니다.
- for문을 이용한 복사
int[] arr = new int[3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
int[] arrCopy = new int[arr.length*2]; // 기존 배열보다 길이가 2배인 배열 생성
for(int i = 0 ; i < arr.length; i++ ){
tmp[i] = arr[i];
}
- System.arraycopy(num, 0, newNum, 0, num.length)
- for문보다 효율적입니다.
다차원 배열
2차원 이상의 배열을 의미합니다.
2차원 배열의 선언과 인덱스
1차원배열에서 괄호가 하나 더 추가된 것입니다.
타입[][] 변수이름;
변수이름 = new 타입[행 길이][열 길이]; // 배열 생성
2차원 배열의 초기화
int[][] arr = new int[][] { {1,2,3}, {4,5,6} };
int[][] arr = { {1,2,3}, {4,5,6} }; // 위의 new int[][] 생략 가능
2차원 배열의 길이
행의 길이는 변수이름.length 를 이용하며 열의 길이는 변수이름[행의 인덱스].length 를 사용합니다.
가변 배열
2차원 이상의 다차원 배열을 생성할 때 전체 배열 차수 중 마지막 차수의 길이를 지정하지 않고, 추후에 각기 다른 길이의 배열을 생성함으로써 고정된 형태가 아닌 보다 유동적인 가변 배열을 구성할 수 있습니다.
[첫 번쨰 방법]
int[][] score1 = new int[3][]; // 두 번째 차원의 길이는 지정하지 않음.
score1[0] = new int[1];
score2[1] = new int[2];
score3[2] = new int[3];
[두 번쨰 방법]
int[][] score2 = {
{1}
, {2,3}
, {4,5,6}
};
Reference
자바의 정석
댓글남기기