프로그래밍/JAVA

[ JAVA ] 다차원 배열이란?

리신 2022. 9. 15. 17:33
반응형

다차원 배열이란?

2차원 이상의 배열을 의미하며, 배열 요소로 또 다른 배열을 가지고 있는 배열을 의미합니다.

 

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

2차원 배열을 선언하는 방법은 1차원 배열과 같다. 다만 괄호[]가 하나 더 들어갈 뿐이다.

선언 방법 선언 예
타입[][] 변수이름; int[][] score;
타입 변수이름[][]; int score[][];
타입[]변수이름[] int[] score[];

예시)

2차원 배열은 주로 테이블 형태의 데이터를 담는데 사용되며, 만일 4행3열의 데이터를 담기 위한 배열을 생성하려면 아래와 같이 한다.

 int [][] score = new int[4][3]; // 4행 3열의 2차원 배열을 생성한다.

위 문장이 수행되면 아래의 그림처럼 4행3열 데이터, 모두 12개의 int값을 저장할 수 있는 공간이 마련된다.

int int int
int int int
int int int
int int int

위의 그림에서는 각 요소, 즉 저장공간의 타입을 적어놓은 것이고, 실제로는 배열요소의 타입인 int의 기본값인 0이 저장된다.

배열을 생성하면, 배열의 각 요소에는 배열요소타입의 기본값이 자동으로 저장된다.

 

 

2. 2차원 배열의 index

2차원 배열은 행(row)과 열(column)로 구성되어 있다.

따라서 index도 행과 열에 각각 하나씩 존재한다.

 

index 범위

- 행 index의 범위 : 0 ~ (행의 길이 -1)

- 열 index의 범위 : 0 ~ (열의 길이 -1)

 

배열의 각 요소에 접근하는 방법 :  배열이름[행index][열index]

 

예를 들어)

 int [][] score = new int[4][3]; // 4행 3열의 2차원 배열을 생성한다.

배열 score의 1행 1열에 100을 저장하고, 이 값을 출력하려면 다음과 같이 하면 된다.

score[0][0] = 100;			// 배열 score의 1행 1열에 100을 저장
System.out.println(score[0][0]);	// 배열 score의 1행 1열의 값을 출력

 

 

3. 2차원 배열의 초기화

2차원 배열도 괄호{}를 사용해서 생성과 초기화를 동시에 할 수 있다.

다만, 1차원 배열보다 괄호{}를 한번 더 써서 행별로 구분해 준다.

 

int [][] arr = new int[][]{{1,2,3},{4,5,6}};
int [][] arr = {{1,2,3},{4,5,6}};  // new int [][]가 생략됨

// 아래와 같이 행별로 줄 바꿈을 해주는 것이 보기 좋다.
int [][] arr = {
                    {1,2,3},
                    {4,5,6}
				};

 

그럼 2차원 배열의 길이는 얼마일까?

int [][] score = {
		    {100,100,100},
                    {20,20,20},
                    {30,30,30},
                    {40,40,40},
                    {50,50,50}
				};

위 2차원 배열  score.length의 값은 5이다.

일단, 배열의 참조변수 score가 참조하고 있는 배열의 길이가 얼마인가를 세어보면 될 것이다.

그리고 score[0].length은 배열 참조변수 score[0]이 참조하고 있는 배열의 길이이므로 3이다.

 

3. 가변 배열

2차원 이상의 배열에 대해서 '배열의 배열' 형태로 처리한다는 사실을 이용하면 자유로운 형태의 배열을 구성할 수 있다.

 

2차원 이상의 다차원 배열을 생성할 때 전체 배열 치수 중 마지막 차수의 길이를 지정하지 않고, 추후에 생성할 수 있다.

따라서 유동적인 가변 배열을 구성 할 수 있다.

 

예를 들어)

 

'5 x 3' 길이의 2차원 배열 score를 생성하는 코드가 있다.

int [][] score = new int[5][3]; // 5행 3열의 2차원 배열 생성

위 코드를 아래와 같이 가변배열로 표현 할 수 있다.

int [][] score = new int[5][]; // 두 번쨰 차원의 길이는 지정하지 않는다.
score[0] = new int[3];
score[1] = new int[3];
score[2] = new int[3];
score[3] = new int[3];
score[4] = new int[3];

 위의 배열은 고정적인 배열만 생성 하고 있지만,

아래와 같이 2차원 배열을 생성하면 각 행마다 다른 길이의 배열을 생성하는 것이 가능하다.

int [][] score = new int[5][]; // 두 번쨰 차원의 길이는 지정하지 않는다.
score[0] = new int[4];
score[1] = new int[3];
score[2] = new int[2];
score[3] = new int[2];
score[4] = new int[3];

 

* 따라서 score.length의 값은 여전히 5이지만, 일반적인 2차원 배열과 달리 score[0].length의 값은 4이고, score[0].length의 값은 3으로 서로 다르다.

 

 

* 참고 자료 JAVA의 정석

반응형

'프로그래밍 > JAVA' 카테고리의 다른 글

[ JAVA ] Char를 Int로 변환하기  (0) 2022.09.22
[ JAVA ] 클래스와 객체  (0) 2022.09.15
[ JAVA ] 객체지향 프로그래밍이란?  (1) 2022.09.15
[ JAVA ] 변수의 타입  (0) 2022.08.24
[ JAVA ] 변수와 상수  (0) 2022.08.24