배열의 종류
- 1차원 배열
- 다차원 배열
- 배열의 길이
- 배열 복사하기
1차원 배열
배열은 같은 자료형을 가지는 변수들을 순차적으로 관리할 수 있는 기능입니다. 선언 방법은 아래와 같습니다.
int[] answer = new int[3]; //배열의 길이만 정하는 선언 방
//int a;느낌
위의 선언을 통하여 생성되는 변수는 answer[index] 형식으로 생성이 되며 index값은 0부터 위에서 선언한 길이만큼 채워진다. 1부터 채워지는 것이 아니기 때문에 길이가 n인 경우 index값은 n-1까지 생성됩니다. 따라서 위의 선언을 통하여 생성된 변수는 answer[0], answer[1], answer[2]로 3개가 생성됩니다. 위의 방식은 배열의 길이만 설정하여 변수를 생성하는 방벙이고 생성과 동시에 값을 채워주는 방법은 아래와 같습니다.
int[] answer = {2,1,4}; //배열의 길이와 값을 동시에 선언하는 방법
//int a=5;느낌
위의 방식으로 선언을 하면 길이가 3인 배열을 생성하면서 answer[0]에는 2가 answer[1]에는 1이 answer[2]에는 4가 저장됩니다. 이러한 식으로 같은 자료형을 가지는 관련된 변수들이 여러 개 필요한 경우 사용하여 코드를 간략히 할 수 있습니다.
다차원 배열
2차원 배열과 3차원 배열이 있습니다. 2차원 배열 먼저 알아보고 3차원 배열 알아보도록 하겠습니다.
2차원 배열
int[][] coordinate = new int[2][3];
배열의 공간만 선언하는 방식입니다. 체스판 같은 공간이 생긴다고 생각하시면 편합니다. 배열에 들어가는 값은 체스판의 말들로 생각을 하시면 됩니다. 배열 선언과 동시에 값을 선언하는 방법을 예시로 보이겠습니다.
int[][] coordinate = {{2,1,3},{5,6,0}};
1차원 배열에서 값을 넣으며 배열을 선언하는 방법과 비슷합니다. 다만 2차원이기 때문에 1차원 배열을 두 번 선언하는 느낌으로 사용됩니다. 위의 선언을 표로 표현하면 아래와 같습니다.
coordinate[a][b] | b=0 | b=1 | b=2 |
a=0 | 2 | 1 | 3 |
a=1 | 5 | 6 | 0 |
표와 같이 2행 3열로 나타나 집니다. a의 값은 행을 나타내고 b의 값은 열을 나타냅니다. 1차원과 마찬가지로 index값이 0부터 입력되므로 값을 불러올 때 주의하셔서 index 값을 입력하여야 합니다.
3차원 배열
int[][][] cube = new in[2][3][4];
공간만 선언하는 방식은 위와 같습니다. 1차원 2차원 배열과 크게 다르지 않습니다. 쉽게 생각한다면 2차원 배열의 모양이 여러 개 있다고 생각하시면 편합니다. index가 cude[a][b][c]처럼 a, b, c로 되어있다면 [b][c]를 index로 가지는 2차원 배열이 a개만큼 있는 구조입니다.
int[][][] cube = {{{0,1,2},{3,4,5}},{{6,7,8},{9,10,11}}};
위의 방식은 배열을 선언과 동시에 값을 넣는 방법이며 위의 경우는 new int[2][2][3]로 선언한 배열과 같은 크기를 가지게 됩니다.
배열의 길이
배열의 길이를 확인하는 방법은 length를 사용하면 길이를 알 수 있습니다. 각 차원마다 예시를 통하여 설명하겠습니다.
1차원 배열
int[] answer = new int[5]; //index값이 최대 4
System.out.println(answer.length);//출력 값이 5
1차원 배열의 경우 예시입니다. 1차원 배열은 어려울 것 없이 배열의 길이는 선언해준 배열의 길이를 가지고 오게 됩니다.
2차원 배열
int[][] coordinate = new int[2][3];//2행3열의 배열생성
System.out.println(coordinate.lenghth);//출력 값은 2
2차원 배열의 경우 위와 같이 2행 3 열인 경우 배열의 길이는 변수가 들어갈 수 있는 공간인 6이 되는 것이 아니라 행의 길이인 2가 나오게 됩니다. 그렇다면 열의 길이를 알기 위한 방법의 예시는 아래와 같습니다.
System.out.println(coordinate[0].length);//1행의 길이를 출력
System.out.println(coordinate[1].length);//2행의 길이를 출력
2차원 배열이란 1차원 배열을 행으로 나열한 것으로 보기 때문에 각 행에 1차원 배열이 있으므로 열의 길이를 확인하기 위해서는 위와 같이 사용하시면 됩니다.
3차원 배열
3차원 배열의 경우 2차원 배열과 비슷합니다.
int[][][] cube = new int[2][3][4];
위와 같이 선언된 경우를 예시로 들어서 설명드리겠습니다.
System.out.println(cube.length);//출력 값은 2
cube[2][3][4]를 나누어서 생각을 한다면 배열 이름이 cube라는 길이가 2인 배열이 있고 그 안에 값으로 3행 4열의 배열이 들어가는 형식입니다. 그렇기 때문에 위와 같이 단순히 cube.length를 한다면 2가 나오게 됩니다.
System.out.println(cube[0].length);//출력 값은 3
System.out.println(cube[1].length);//출력 값은 3
마찬가지로 위의 경우는 cube[index]를 coordinate로 보신다면 이름이 cube[0] 과 cube[1]인 길이가 3인 배열 즉 coordinate[3][4]로 생각을 하시면 됩니다. 따라서 위의 경우는 길이가 3으로 출력됩니다.
System.out.println(cube[0][2].length);//출력 값은 4
위의 설명과 마찬가지로 진행이 되기 때문에 길이가 4인 배열이 나오게 됩니다. cube[a][b]를 1차원 배열에서 선언하였던 answer이라고 생각을 한다면 answer[4]로 생각하시면 됩니다.
배열 복사하기
int[] arrayOne = {1,3,5,7,9};
int[] arrayTwo = {2,4,6,8,10};
System.arraycopy(arrayOne,2,arrayTwo,3,2);
배열을 복사하는 명령어는 arraycopy입니다. 위와 같이 System.arraycopy를 이용하면 됩니다. 소괄호 안에는 순서대로 복사를 할 배열의 이름, 복사를 시작할 index값, 붙여 넣을 배열의 이름, 붙여 넣기 시작할 index값, 복사할 값의 개수입니다. 위의 같은 경우 복사 후에 arrayTwo배열의 값은 아래와 같이 변경됩니다.
for(int i=0;i<arrayTwo.length;i++){
System.out.println(arrayTwo[i]);
}
//출력은 2,4,6,3,5
//arrayTwo={2,4,6,3,5}가 됩니다.
만약 아래와 같이 복사한 개수가 붙여 넣을 배열의 크기보다 크면 오류가 납니다.
int[] arrayOne = {1,3,5,7,9};
int[] arrayTwo = {2,4,6,8,10};
System.arraycopy(arrayOne,2,arrayTwo,3,3);
//붙여넣을 자리는 2칸 붙여 넣을 값은 3개