본문으로 건너뛰기
Advertisement

5.3 다차원 배열 (Multi-dimensional Arrays)

지금까지 배운 배열은 1차원 배열로 메모리 상에 요소들이 일직선으로 연속되게 배치된 형태였습니다. 자바에서는 필요에 따라 [][] 등 대괄호를 더 추가하여 2차원, 3차원 이상의 복잡한 형태의 데이터 공간을 만들어 낼 수 있습니다.

1. 2차원 배열의 선언과 인덱스

2차원 배열은 주로 행(Row)과 열(Column)로 구성된 데이터베이스 정보 형태, 엑셀 시트 형태의 표, 평면 매트릭스 정보를 저장할 때 주로 사용합니다.

2차원 배열 선언

1차원 배열에서 [] 괄호 하나를 추가하는 것만으로 선언됩니다. 타입이나 변수 뒤에 붙지만 가장 일반적인 것은 타입 뒤에 두 개 모두 기입하는 형태입니다.

int[][] score = new int[4][3]; // 4행 3열의 데이터(총 12개) 공간 할당

인덱스의 구조

score[0][0]부터 시작하여 score[3][2]까지 사용됩니다. 첫 번째 대괄호는 '행'을, 두 번째 대괄호는 '열'을 나타냅니다.

// 선언과 동시에 생성 및 요소 초기화 블록 구문
int[][] score = { // 중괄호로 차원 분리
{ 100, 100, 100 },
{ 20, 20, 20 },
{ 30, 30, 30 },
{ 40, 40, 40 }
}; // 행 4개, 각 행마다 열 3개

2. 2차원 배열의 초기화 및 길이 특징

자바에서 다차원 배열을 내부적으로 파악할 때엔 사실상 "배열의 배열" 구조로 인식합니다.

int[][] score 변수는 여러 배열의 '주소들을 담은 1차원 참조 배열'을 가장 먼저 가리킬 뿐입니다.

  • score.length: 행(Row)의 개수인 4를 반환합니다.
  • score[0].length: score 배열 첫번째 행 배열이 포함하고 있는 열(Column)의 개수인 3을 반환합니다.
// 중첩 for 문을 이용한 다차원 배열 접근
for (int i = 0; i < score.length; i++) { // 행 반복 (4번)
for (int j = 0; j < score[i].length; j++) { // 각 행의 열 반복 (3번)
System.out.printf("score[%d][%d]=%d\n", i, j, score[i][j]);
}
}

이렇듯 중첩 배열의 논리적 구도를 취하기 때문에, 무조건적으로 정형성(정방형 배열)을 띠어야만 하는 것은 아니며 각 행별로 길이가 각양각색으로 다른 논리 구조의 가변 배열 을 생성할 수 있다는 장점도 갖추게 됩니다.

Advertisement