Java/Java 기본

다차원 배열

검정비니 2018. 6. 12. 23:46
728x90
반응형

다차원 배열



자바에서 여러 차원의 배열을 만들 수 있다. 그러나 일반적으로 3차원 이상의 배열은 잘 사용하지 않는다. 실무 상에서도 일반적으로 2차원 배열까지만 사용한다. 가끔 3차원 배열을 사용하는 경우도 있기는 하지만 워낙 드문 일이고, 그마저도 자바 컬렉션으로 대체하는 경우가 많다. 따라서, 사실상 3차원 배열 이상은 사용할 일이 없다고 생각하면 될 것이다.


자바의 다차원 배열은 독특한 구조를 가지기 때문에 비정방형 배열을 만들 수도 있다.




1. 2차원 배열



- 2차원 배열의 선언과 생성


자바에서 2차원 배열의 레퍼런스 변수 선언은 다음과 같다.


int intArray[][];

int[] intArray[];

int[][] intArray;


위의 3가지 방식들 중에서 아무 방식이나 골라서 사용하면 된다. 결과는 모두 똑같으니 본인에게 가장 편한 방식을 사용하면 된다.


1차원 배열과 마찬가지로 2차원 배열에서도 레퍼런스 변수 선언 후 배열을 생성하면 다음과 같다.


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

float[][] floatArray = new float[5][5]; // 5행 5열의 2차원 배열 생성


자바의 2차원 배열에서 첫 번째 []는 행을 나타내고 두 번째 []는 열을 나타낸다. 또한, 2차원 배열에서 행은 1차원 배열에 대한 레퍼런스가 된다.



2차원 배열을 이미지화 시키면 아래의 이미지와 같은 형태가 된다.




2차원 배열 역시 배열이기 때문에 1차원 배열처럼 length 필드를 가지고 있다. 2차원 배열의 length의 의미를 살펴보면 다음과 같다.


1) i.length          ->   2차원 배열이 가진 행의 개수

2) i[0].length    ->    0번째 행이 가진 열의 개수

3) i[1].length     ->    1번째 행이 가진 열의 개수

4) i[n].length    ->    n번째 행이 가진 열의 개수



1차원 배열과 마찬가지로 2차원 배열도 다음과 같이 레퍼런스 변수 선언과 배열 생성을 동시에 할 수 있다.


int[][] intArray = new int[2][5];

char[][] charArray = new char[5][5];



이때 length 필드가 얼마인지 살펴보면 다음과 같다.


int n = intArray.length;      // n = 2

int m = charArray.length;  // m = 5



- 2차원 배열의 초기화


다음과 같이 2차원 배열의 선언, 생성과 함께 각 원소를 초기화할 수 있다.


int intArray[][] = {{0,1,2}, {3,4,5}, {6,7,8}};

char charArray[][] = {{'c', 'b', 'a'}, {'q', 'w', 'e'}, {'d', 'f', 'g'}};





2. 비정방형 배열



지금까지 다룬 배열은 모두 정방형 배열이다. 정방형 배열은 각 행의 열 개수가 모두 동일한 배열을 말하며, 비정방형 배열은 행마다 열 개수가 서로 다른 배열을 말한다.



비정방형 배열은 행마다 열의 개수가 서로 다를 수 있다. 비정방형 배열을 만들기 위해서는 다음 코드와 같은 과정이 필요하다.


int i[][] = new int[4][]; // 2차원 배열의 레퍼런스 선언 후, 각 행의 레퍼런스 배열 생성.

i[0] = new int[1];          // 첫째 행에 1개 정수 배열 생성

i[1] = new int[2];          // 둘째 행에 2개 정수 배열 생성

i[2] = new int[3];          // 셋째 행에 3개 정수 배열 생성

i[3] = new int[4];          // 넷째 행에 4개 정수 배열 생성


이 i라는 비정방형 2차원 배열을 가지고 length 필드의 의미를 다시 한번 복습해보자.


i.length       -> 2차원 배열의 행의 개수로서 4

i[0].length  -> 0번째 행이 가진 열의 개수로서 1

i[1].length  -> 1번째 행이 가진 열의 개수로서 1

i[2].length  -> 2번째 행이 가진 열의 개수로서 1

i[3].length  -> 3번째 행이 가진 열의 개수로서 1

i[n].length  -> n번째 행이 가진 열의 개수로서 1



어떤 메소드가 배열을 인자로 받았을 때 인자로 주어진 배열이 정방형인지 비정방형인지는 표시되지 않기 때문에 항상 length 필드를 사용하여 각 행의 열의 개수를 파악하여야 한다.



배열 생성 시에 초기화를 통해 비정방형 배열을 생성할 수도 있다.


i.e.

int intArray[][] = { {0}, {1, 2}, {3, 4, 5}, {6, 7, 8, 9} };

반응형

'Java > Java 기본' 카테고리의 다른 글

main() 메소드의 인자  (0) 2018.06.13
메소드에서 배열 리턴  (0) 2018.06.12
배열의 크기와 인덱스  (0) 2018.06.12
배열 원소 접근  (0) 2018.06.12
배열의 참조  (0) 2018.06.11