본문 바로가기

Java프로그래밍

객체기반SW설계 13차시: 다차원 배열

반응형

다차원 배열 (Multi dimensional array)

2차원 이상의 배열을 다차원 배열이라고 한다.
행렬 같은 것을 생각하면 2차원 배열을 쉽게 이해할 수 있고,
입체공간을 생각하면 3차원 배열이 머리속에 그려질 것이다.

2차원 배열의 선언

1차원 배열과 비슷하지만, 배열을 나타내는 [] 표시를
하나 더 사용해서 아래와 같이 나타낸다.
int[][] a = new int[3][3];

2차원 배열선언과 동시에 값을 할당하는 것은 아래와 같이 한다.

눈여겨 볼 것은, 2차원 배열이기 때문에 행별로 { }로 감싸서 표시해야 하다.

만약, { } 표시를 하지 않을 경우에는 다음과 같이 컴파일 오류로 표시된다.


선언된 2차원 배열의 각 요소에 접근하는 것은 for-loop을 2번 중첩하면 된다.



2차원 배열의 길이


2차원 배열의 길이는 1차원 배열과는 조금 다르다.

예를 들어 아래와 같은 3x3 배열을 예를 들어보자.

전체적인 공간은 9개이다.


int[][] a = new int[3][3];


하지만, a.length는 행의 개수를 의미하여, 3이 되다.

전체 공간의 개수 9가 아님에 유의하자.

각 행에 들어있는 열의 개수는 각 행별로 확인해야 한다.

예를 들어, 0번 행의 경우에는 a[0].length와 같다.

아래는 2차원 배열에 .length를 사용했을 때의 출력결과를 보여준다.


이렇게 되는 이유는 아래 그림을 보면 다소나마 쉽게 이해할 수 있다.

a.length는 a안에 있는 요소의 개수 이므로 3이 되고,

a[0].length는 그 안에 있는 요소의 개수이므로 3이 되는 이치이다.




3차원 배열의 선언


2차원배열 보다 [] 를 하나 더 붙이면 3차원 배열을 만들 수 잇다

이것을 그림으로 표시해 보면 아래와 같은 입체를 생각해볼 수 있다.

모두 12개( = 3*2*2)의 사각형으로 구성된 입체이다. 

3차원 배열에 대한 초기화는 조금 신경써서 해야 한다.

c[3][2][2]의 경우에,

우선 { }으로 3등분을 한다.

그리고, 각 { }안에서, { }으로 다시 2등분을 한다.

가장 안 쪽의 { }안에, 숫자 2개씩을 쓰면 된다.

이것을 그림으로 보여주면 아래와 같다.


실제로 초기화 한 예는 아래와 같다.


그리고, 3차원 배열의 각 요소를 접근하는 것은 

2차원 배열과 마찬가지지만, for-loop을 한 번 더, 즉 3번을 중첩하여야 한다.



3차원 배열의 길이


위에서 2차원 배열의 길이를 설명했다.

3차원 배열의 길이도 아래 그림과 같은 의미를 같는다. 

배열 이름에다가 .length를 붙이면, 가장 큰 그룹의 개수를 의미하며,

차원이 하나씩 들어갈 수록 그 안에 있는 서브그룹의 개수들을 의미하게 된다.


아래 그림에서 a.length는 가장 큰 그룹의 개수이므로 3이 되고,

a[0].length는 그 안에서의 서브그룹의 개수이므로 2,

마지막으로 a[0][0]는 또 다시 그안에서의 서브그룹의 개수이므로 2가 되는 것이다.

따라서, 전체 공간의 개수를 알려면 각 단계별 개수를 모두 곱한 값이 된다.


3차원 배열의 크기를 출력해 보는 아래 예제를 살펴보자.

c는 3*2*2 크기를 갖는 3차원 배열이다.

이 때, c.length는 가장 큰 그룹의 개수를 의미한다.

그리고 c[0]은 0번째 그룹 안에서의 서브그룹의 개수, 2를 의미한다.

마지막으로 c[0][0]는 가장 안쪽 그룹에 있는 숫자의 개수이므로 2가 된다.




위의 내용을 동영상에서 보다 자세하게 설명합니다. 


반응형