자바에서는 일차원 배열뿐 아니라 이차원, 삼차원.. 등등의 다차원 배열도 사용할 수 있다. 삼차원 이상의 배열은 이차원 배열과 사용법이 동일하므로 여기서는 이차원 배열에 대해서만 설명하겠다.


 이차원 배열은 선언할 때 변수명 뒤에 대괄호 쌍 두 개가 온다. 예를 들면 다음과 같다.


int num[][];
double val[][];
char mch[][];


위의 선언문은 사용했다고 해서 바로 배열을 사용할 수는 없고 일차원 배열에서와 마찬가지로 실제 메모리를 할당받아야 하는데 new 연산자를 이용한다. new 키워드 다음에 자료형[차수][차수] 형태로 입력한다. 예를 들면 다음과 같다.


num = new int[3][4];
val = new double[2][3];
mch = new[100][1000];


메모리를 할당하면 배열의 요소는 자동으로 기본값(정수형, 실수형은 0)으로 채워진다. 위와 같이 선언과 메모리 할당을 분리해서 수행할 수도 있고 아니면 선언과 메모리 할당을 동시에 할 수도 있다.


int num[][] = new int[3][4];;
double val[][] = new double[2][3];
char mch[][] = new char[100][1000];


만약 선언과 동시에 배열을 특정한 값들로 초기화를 하는 경우라면 new 연산자를 사용할 필요 없이 다음과 같이 중괄호를 이용할 수 있다.


double val[][] = {
   {1.1, 2.2, 3.3},
   {4.4, 5.5, 6.6}
};


이 경우 주어진 초기값에 의해서 배열의 크기는 자동으로 정해지게 된다.

 배열의 요소를 참조하는 방법은 일차원 배열과 유사하게 변수명 뒤에 대괄호로 인덱스를 지정하는데 이 경우 대괄호쌍이 두 개가 온다.


val[0][0] = 10.1; // 요소값을 지정하는 경우
double da = val[1][2]; //요소값을 읽어내는 경우


이차원 배열의 경우 length 필드는 최상위 차원의 크기를 갖는다. 하위 차원의 크기를 구하고 싶다면 다음과 같이 하면 된다.


System.out.println( val.length ); // 2가 출력된다.
System.out.println( val[0].length ); // 3이 출력된다.
System.out.println( val[1].length ); // 3이 출력된다.


 자바에서 배열은 참조형(reference type)이라는 점도 숙지하고 있어야 한다. 따라서 다른 함수에서 배열을 그대로 받아서 조작하는 경우 원 배열도 영향을 받게 된다.



Posted by 살레시오
,