이전 걸음에서 배열에 대한 내용과 문제를 풀어봤습니다. 이렇게 배열을 한 줄로 쪽 세워서 쓰는 것을 1차원 배열이라고 합니다. 1차원 배열을 사용한다면 불편한 점이 없을 까요? 만약에 값을 사용을 하려고 할 때 구분을 하여서 값을 관리 하는 것이 2개이거나 또는 3개인 경우 이렇게 일렬로 세워서 데이터를 관리하면 값을 추출 하거나 저장하기에는 힘들 것 같지 않나요? 저 역시 안되는 것은 아니지만 뭔가 추가적인 작업이 당연히 필요할 것이라고 생각합니다.
그럼 값이 구분이 되는 것이 2개 이상인 경우에는 어떻게 배열을 활용을 해야 할까요? 구분을 해야 한다면 중간에 구분이 될 수 있는 것이 추가가 된다면 여러 구분을 나눠서 값을 저장하거나 사용이 된다면 값의 관리가 좀 더 좋을 수 있습니다. 그것이 배열이 하나가 아니라 여러 배열을 추가를 하면 됩니다. 이 글을 읽으신다면 구분이 필요한 배열이 무엇이면 사용을 하는 방법을 알 수가 있습니다.
위의 내용이 바로 다차원 배열입니다. 다차원 배열은 값을 만나기 전에 배열을 둬서 나누기 때문에 값을 찾아 갈 때 사람이 이해를 하기가 좋습니다. 다차원 배열에 대한 이해와 왜 나왔으며 어떻게 사용을 하면 좋을 지 이 글을 끝까지 읽으신다면 이해를 하실 수 있습니다.
다차원 배열 이란?
다차원 배열을 왜 쓰게 된 것일까요? 1차원 배열이 있는데 다차원 배열을 쓰게 된 것은 사람은 구분을 지어주면 이해를 더 빨리 하기 때문입니다. 컴퓨터는 상관이 없지만 사람은 뭐든 구분을 지어주는 것이 중요합니다.
예를 들어 한반에 20명에 학생이 있고 시험 과목이 10개이면 1차원 배열로 한다면 20 * 10을 [200]을 만들어서 점수를 저장하고 사용을 해야 합니다. 이렇게 되면 사람이 이해를 하는 구분이 되어 있지 않아서 사용을 하기가 어려워 집니다.
그럼 이렇게 [200]이 아니라 중간에 구분을 둬서 [20][10]이렇게 인덱스를 접근을 한다면 어떤가요? 좀 더 편하게 느껴지지 않나요? 앞에 인덱스는 학생이고 뒤에 있는 인덱스는 과목이 되기 때문에 직관적으로 보기도 편해집니다.
다차원 배열 사용 방법
다차원 배열은 2차원 배열 이상을 말합니다. 하지만 제일 많이 쓰는 것이 2차원 배열이기 때문에 2차원 배열로 설명을 드리겠습니다.
int[][] a = new int[5][5]; //5X5배열 선언
a[0][0] = 10; // 2차원 배열 a의 인덱서 0, 0에 값 10을 대입
System.out.println(a[0][0]);//2차원 배열 변수 a의 인덱서 0,0의 값을 출력 10이 출력 됩니다.
※ 여기서 다른 배열 인덱스의 정수 값은 어떻게 될 까요? 배열은 new로 선언해서 만들기 때문에 정수라면 기본적으로 0이 대입이 되어 있습니다.
※ a[0] = 10 이게 될까요? 당연히 안됩니다. a 2차원 배열은 인덱스를 2번이 타고 들어가야 정수 값이 대입을 할 수 있습니다. a[0] 자료형이 int가 아니라 int[]이기 때문에 int를 담을 수 있는 공간을 알고 있는 주소입니다. 그래서 정수 값은 넣을 수 없습니다. 꼭 자료형이 값을 넣을 수 있는 자료형인지 확인을 하셔야 합니다.
public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] a = new int[5][5];
int count = 1;
for(int i = 0;i<a.length;i++) { // 행
for(int j = 0;j<a[i].length;j++) { // 열
a[i][j] = count++;
}
}
for(int i = 0;i<a.length;i++) { // 행
for(int j = 0;j<a[i].length;j++) { // 열
System.out.print(a[i][j] + "\t");
}
System.out.println();
}
}