다차원 배열

양성빈·2022년 6월 9일

참고
자바의 정석
http://www.tcpschool.com/c/c_array_twoDimensional
https://blockdmask.tistory.com/311

다차원 배열

지금까지 우리가 다룬 배열은 1차원 배열이다. 2차원 이상의 배열, 즉 다차원 배열도 선언해서 사용할 수 있다. 다차원 배열의 기본이 2차원 배열이고 잘 학습하면 그 이상의 배열도 메모리가 허용하는 한 사용이 가능하다. 그러면 이런 다차원 배열은 어디서 사용할까? 간략히 말하면 지도, 게임, 평면이나 공간을 구현할 때 사용한다고 생각하면 될것 같다.

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

  • 2차원 배열 선언은 1차원 배열 선언과 동일하다. 다만, []이 하나 더 추가된 형태이다.
선언 방법선언 예
타입[][] 변수이름;int[][] score;
타입 변수이름 [][];int score[][];
타입[] 변수이름[];int[] score[];

3차원 이상의 고차원 배열의 선언은 대괄호[]의 개수를 차원의 수만큼 추가해주만 주기만 하면 된다.

  • 2차원 배열은 주로 테이블 형태의 데이터를 담는데 사용된다.
  • 첫번째 []가 행(세로), 두번째 []이 열(가로)이다.

2차원 배열의 index

  • 2차원 배열은 행과 열로 구성되어 있기 때문에 index도 행과 열에 각각 존재한다.
  • 행 index의 범위는 0 ~ 행의길이 - 1이고, 열 index는 0 ~ 열의 길이 - 1이다.
  • 2차원 배열의 요소 접근 방법은 배열이름[행index][열index]이다.

2차원 배열의 초기화

  • 2차원 배열도 괄호 {}를 사용해서 생성과 초기화를 동시에 할 수 있다.
int[][] arr = new int[][]{{1,2,3}, {4,5,6}};
int[][] arr = {{1,2,3}, {4,5,6}};
  • 2차원 배열의 생성 및 초기화는 위의 코드처럼 하면 되나, 구분을 짓기 위해 아래 코드처럼 작성하는 것이 일반적이다.
int[][] arr = {
	{1,2,3},
    {4,5,6}
}
  • 2차원 배열의 메모리 구조는 어떻게 생겼을까? 아래 그림을 살펴보자.

  • 위의 그림을 보면 2차원 배열은 배열의 배열 구조로 이루어져 있다. 즉, 여러개의 1차원 배열을 묶어서 또 하나의 배열로 만든 것이다. 그러면 위의 그림에서 arr.length는 무엇일까? 6인가? 정답은 2이다. 왜냐하면 위에서 설명했듯이 2차원 배열은 배열의 배열이다. length값은 첫 번째 배열의 길이만 알수 있으므로 2가 나오게 된다.

🙋🏻 보충설명
우리는 이전 시간에 for문과 향상된 for문을 학습했다. 여기서 빠트린 내용이 있어서 여기서 설명한다.
향상된 for문으로는 각 요소에 저장된 값들을 순차적으로 읽어올 수 있지만 배열에 저장된 값을 변경 할 수 없다. 변경하고 싶으면 일반 for문을 사용해야 한다.

가변 배열

  • 가변 배열이란? 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];

  • 가변 배열 역시 다차원 배열 생성과 초기화 방법은 같다.

다차원 배열의 활용

  • 다차원 배열을 배우면 아래와 같은 프로젝트를 진행할 수 있다.
  1. 좌표에 X표하기
  2. 빙고
  3. 행렬의 곱셈
  4. 단어 맞추기
profile
모든 것을 즐길줄 아는 개발자입니다!

0개의 댓글