[Java] 다차원 배열 (multi-dimensional array)

2022. 8. 11. 02:46·Language/Java
728x90

다차원 배열 (multi-dimensional array)

다차원 배열이란 2차원 이상의 배열을 의미하며, 배열 요소로 또 다른 배열을 가지는 배열을 의미한다.

즉, 2차원 배열은 배열 요소로 1차원 배열을 가지는 배열이며,

3차원 배열은 배열 요소로 2차원 배열을 가지는 배열이고,

4차원 배열은 배열 요소로 3차원 배열을 가지는 배열인 것이다.

2차원 배열(two dimensional array)

2차원 배열이란 배열의 요소로 1차원 배열을 가지는 배열이다.

자바에서는 2차원 배열을 나타내는 타입을 따로 제공하지 않는다.

대신에 1차원 배열의 배열 요소로 또 다른 1차원 배열을 사용하여 2차원 배열을 나타낼 수 있다.

따라서 자바에서 2차원 배열은 다음과 같은 문법으로 선언할 수 있다.

1. 타입[][] 배열이름;
2. 타입 배열이름[][];
3. 타입[] 배열이름[];

타입은 배열 요소로 저장되는 변수의 타입을 설정한다.

배열 이름은 배열이 선언된 후에 배열에 접근하기 위해 사용된다.

int[][] arr = new int[2][3];

int k = 10;
for(int i = 0; i < arr.length; i++) {
	for(int j = 0; j < arr[i].length; j++) {
		arr[i][j] = k; // 인덱스를 이용한 초기화
		k += 10;
	}
}

for(int i = 0; i < arr.length; i++) {
	for(int j = 0; j < arr[i].length; j++) {
		System.out.println(arr[i][j] + " ");
	}
	System.out.println()
}
// 실행 결과
10 20 30
40 50 60

위의 예제에서 사용된 arr은 2차원 배열이며, arr[i]는 arr의 각 배열 요소로 1차원 배열이 된다.

따라서 arr.length는 2차원 배열인 arr의 배열 요소의 총 개수를 반환하며, arr[i].length는 arr의 각 배열 요소인 1차원 배열이 가지고 있는 배열 요소의 총 개수를 반환하게 된다.

배열의 선언과 동시에 초기화하는 방법

1차원 배열과 마찬가지로 2차원 배열도 선언과 동시에 초기화할 수 있다.

자바에서는 2차원 배열의 모든 요소를 좀 더 직관적으로 초기화할 수 있다.

타입 배열이름[열의길이][행의길이]={
	{배열요소[0][0], 배열요소[0][1], ...},
	{배열요소[1][0], 배열요소[1][1], ...},
	{배열요소[2][0], 배열요소[2][1], ...},
	...
};
int[][] arr = {
	{10, 20, 30},
	{40, 50, 60}
};
// 실행 결과
10 20 30
40 50 60

가변 배열(dynamic array)

자바에서는 2차원 배열을 생성할 때 열의 길이를 명시하지 않음으로써, 행마다 다른 길이의 배열을 요소로 저장할 수 있다.

이렇게 행마다 다른 길이의 배열을 저장할 수 있는 배열을 가변 배열(dynamic array)이라고 한다.

int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[4];
arr[2] = new int[1];

위의 예제처럼 배열을 생성할 때 두 번째 첨자를 생략하면 가변 배열을 만들 수 있다. 또한, 가변 배열도 초기화 블록을 사용하여 배열을 선언과 동시에 초기화할 수 있다.

int[][] arr = {
	{10, 20},
	{10, 20, 30, 40},
	{10}
};
// 실행 결과
10 20
10 20 30 40
10

정리

2차원 배열(이차원 배열)

2차원 이상의 배열을 다차원 배열이라고 하며, 메모리 용량이 허용하는 한 차원의 제한은 없지만 주로 1, 2차원 배열이 사용되고 2차원 배열은 1차원 배열에서 대괄호([])가 하나 더 추가된다. 주로 테이블 형태의 데이터를 담는데 사용되며, n행 m열의 데이터를 담기 위한 배열이다.

2차원 배열 선언 및 생성

2행 3열의 데이터를 담기 위한 배열을 생성하려면 아래와 같이 작성한다.

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

위의 배열을 생성하면, 2행 3열의 데이터로 6개의 int값을 저장할 수 있는 공간이 생긴다.

2차원 배열 초기화

2차원 배열도 1차원 배열과 같이 {}를 사용해 선언, 생성 및 초기화를 동시에 할 수 있다.

int[][] score={{70, 80, 90}, {80, 90, 100}};
// new int[][]가 생략. 2행 3열의 2차원 배열선언, 생성 및 초기화.

2차원 배열 인덱스

2차원 배열은 행(row)과 열(column)로 구성되어 있기 때문에 index도 행과 열에 하나씩 존재한다. 인덱스는 1이 아닌 0부터 시작되는 것에 유의해야된다. 2차원 배열의 각 원소에 접근하는 방법은 "배열이름[행 인덱스][열 인덱스]"이다.

int[][] score = {{70, 80, 90}, {80, 90, 100}}; 로 2행 3열의 배열을 만들었을 때,
각 인덱스마다 원소값은 아래와 같다.
score[0][0] = 70; // 1행 1열의 값
score[0][1] = 80; // 1행 2열의 값
score[0][2] = 90; // 1행 3열의 값
score[1][0] = 80; // 2행 1열의 값
score[1][1] = 90; // 2행 2열의 값
score[1][2] = 100; // 2행 3열의 값

2차원 배열 길이

2차원 배열은 배열의 배열로 구성되어 있다. 여러 개의 1차원 배열을 묶어서 하나의 배열을 만든 것으로 볼 수 있다.

int[][] score = {{70, 80, 90}, {80, 90, 100}};

위처럼 2행 3열의 배열을 만들었을 때, score.length의 값은 2이다.

그리고 score[0].length의 값은 3이다. 참조변수  score[0]이 참조하고 있는 배열의 길이이기 때문이다.

여기서 score[1].length의 값도 3이다.

score.length = 행의길이 / score[i].length = 열의 길이

'Language > Java' 카테고리의 다른 글

[Java] 메소드 오버로딩 (Method Overloading)  (0) 2022.08.11
[Java] extends, implements의 차이  (0) 2022.08.11
[Java] 해시테이블 (Hashtable)  (0) 2022.08.11
[Java] 해시맵 (HashMap)  (0) 2022.08.10
[Java] 실습 class AppleOrange  (0) 2022.08.10
'Language/Java' 카테고리의 다른 글
  • [Java] 메소드 오버로딩 (Method Overloading)
  • [Java] extends, implements의 차이
  • [Java] 해시테이블 (Hashtable)
  • [Java] 해시맵 (HashMap)
arajo
arajo
  • arajo
    아라 메모장
    arajo
  • 전체
    오늘
    어제
    • 분류 전체보기 (509)
      • Language (298)
        • HTML (55)
        • CSS (11)
        • JavaScript (70)
        • TypeScript (8)
        • Python (33)
        • Java (119)
        • C (0)
        • C# (2)
      • Programming (92)
        • Programming (14)
        • Web (51)
        • Apache (1)
        • MySQL (23)
        • AWS (3)
      • Framework | Library (26)
        • Framework | Library (3)
        • Vue.js (2)
        • React.js (5)
        • React Native (4)
        • Node.js (1)
        • Ajax (1)
        • Bootstrap (8)
        • Spring (1)
        • Flutter (1)
      • etc (2)
      • 휴식 (19)
        • 책 (13)
        • 일기 (5)
        • 게임 일기 (1)
      • A (71)
        • 공부 (18)
        • 기타 (6)
        • 일 (47)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    객체
    Java
    next.js
    HTML
    리액트
    object
    react
    web
    제어문
    JavaScript
    array
    파이썬
    CSS
    타입스크립트
    TypeScript
    MySQL
    Python
    변수
    자바스크립트
    event
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
arajo
[Java] 다차원 배열 (multi-dimensional array)
상단으로

티스토리툴바