다차원 배열이란?
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 |