2차원 배열은 말 그대로 배열 안에 또 다른 배열이 있는 구조를 의미한다. 이를 통해 행(row)과 열(column)로 이루어진 데이터 저장이 가능해진다. 간단히 말해, 2차원 배열은 하나의 배열이 각 행을 나타내고, 각 행이 또 다른 배열(열)을 가지는 형태이다.
예를 들어, 다음과 같은 2차원 배열을 생각해보자:
int[][] numbers = new int[2][3]; // 2행 3열의 2차원 배열
위 배열은 아래와 같은 구조를 가진다:
numbers[0] = [0, 0, 0]
numbers[1] = [0, 0, 0]
이때 numbers[1][0] = 3; 라고 하면,
두 번째 행(1번째 인덱스)의 첫 번째 열(0번째 인덱스)에 3을 저장하겠다는 뜻이다. 즉, numbers[1][0]의 값이 3으로 바뀌게 된다.
결과적으로 배열의 상태는 아래와 같이 바뀐다:
numbers[0] = [0, 0, 0]
numbers[1] = [3, 0, 0]
이처럼 2차원 배열은 데이터를 행과 열의 형태로 저장하고, 배열명[행][열]의 방식으로 값을 할당하거나 접근할 수 있다.

numbers [1][0] = 3;이면 2번째 의 1번째 요소에 3을 할당하겠다.