Java

[Java]배열(Array) - 2차원 배열

MoZZANG 2022. 3. 2. 20:01

2차원 배열은 1차원 배열이 쌓여서 평면형태를 구성하는 배열을 말한다. ㅌ9

 

위 그림처럼 각 행에 따른 열이 존재하므로 배열의 위치를 나타내는 배열명에도 두개의 자릿수가 필요하다. 따라서 1차원 배열은 대괄호 하나를 사용했다면 2차원 배열은 대괄호가 2개가 필요한 것이다.

 

1) 배열 선언

구조는 1차원 배열과 동일하지만 대괄호가 두개이다. 첫번째 대괄호는 행을, 두번째 대괄호는 열을 나타낸다.

 

 

▲ 2행 3열의 int형 배열 arrNum을 선언과 동시에 할당하였다. 1차원 배열과 동일하게 arrNum에는 직접적인 데이터가 아닌 주소가 저장되어 있고 각각의 배열의 값을 출력하기 위해서는 배열명을 변수처럼사용해서 출력하면 된다.

 

 

 

 

2차원 배열도 1차원과 동일하게 초기화를 하지 않으면 자동으로 자료형에 따른 값이 저장되어 있다.

▲위의 경우도 int형 배열이므로 0이 메모리 할당과 동시에 기본값으로 저장되어 있다.

 

 

 

아래와 같이 초기화를 시키고 

 

다시 배열의 값을 출력해보면

▲ 원하는 값으로 잘 초기화가 된 것을 볼 수 있다.

 

 

 

 

 

우리가 위에까지는 계속 하드코딩을 통해서 값을 직접 입력했다. 하지만 실제로는 배열의 크기가 변할 때마다 코드를 계속 수정하지 않는다. 프로그램이 커지고 코드가 길고 복잡해지면 유지보수에 힘들기 때문이다.

 

 

때문에 우리는 훨씬 실무에 가까운 방식으로 연습해야한다. 

 

2차원배열에서 행의 수는 배열명.length

열의 수는 배열명[행 index].length를 사용해서 변화하는 배열의 크기에 대응할 수 있다. 다음과 같이 말이다.

 

 

 

 

 

 

Java는 다른 언어와 달리 열의 크기를 동적으로 할당할 수 있다. 즉, 각 행마다 열의 크기를 달리설정할 수 있다.

 

열을 동적으로 할당하기 위해 열의 수를 미지정하는 방법을 사용할 수 있다.

▲int형의 dynamic배열에서 행의 크기만 2로 설정 후 열의 크기를 정하는 대괄호에는 수를 지정하지 않았다.

   이것은 아직 배열이 메모리 할당이 안된 것과 같다. 자동초기화도 되지 않은 것이다. 이런 상황에서 dynamic[0]으로 첫 행을 출력해보면 null이 출력된다. 위에서 사용했던 arrNum은 이미 초기화까지 끝난상태이므로 2차원배열에서는 arrNum[0]을 출력하면 0행의 시작주소가 출력된다.

 

 

이제 각 행의 열의 크기를 각각 다르게 정하고 출력해보면

▼ 아래와 같이 각 행의 주소와 설정한 열의 수가 잘 출력되는 것을 볼 수 있다.

 

 

초기화 전 실제 배열의 구조도 한번 보면 

▲1행 3열과 2행 1열의 구조를 가지고 있는 것을 볼 수 있다.

 

 

▼ 잘 초기화 시킨 후 결과를 출력해보면 원하는 결과가 출력된다.

 

 

 

 

 

 

2차원 배열도 배열 선언과 동시에 초기화가 가능하다. 이때는 중괄호를 사용하는데

바깥{ }는 초기화를 위한 중괄호, 바깥{ }안의 { }수는 행의 수를 의미, 안쪽 { } 안의 값의 갯수는 열의 수를, 값 자체는 각 열의 데이터 값을 의미한다.

 

텍스트 보다는 예시 코드를 보면 이해하기 편하다. 아래의 코드를 보자

▲ 각각의 중괄호와 그 의미는 위와 같다.

 

▲ 우리가 원하는 형태로 잘 출력된 것을 볼 수 있다.

 

 

 

 

 

 

이처럼 2차원 배열은 1차원 배열을 붙여 평면형태로 이루어진 배열이며, 때문에 각 배열명에 인덱스 값이 2개씩 필요하다. 또한 java에서는 각 행의 열을 다르게 설정할 수 있다.

 

 

'Java' 카테고리의 다른 글

[Java]method - type2  (0) 2022.03.02
[Java]method - type1(void형)  (0) 2022.03.02
[Java]배열(Array) - 1차원 배열  (0) 2022.02.28
[Java]break와 continue  (0) 2022.02.28
[Java]반복문(part.3- do~while문)  (0) 2022.02.28